Публикация пакетов GitHub возвращает ошибку 422

#android #gradle #github-package-registry

#Android #gradle #github-package-registry

Вопрос:

Я уже некоторое время использую пакеты GitHub в проекте Android без каких-либо проблем. Теперь, когда я пытаюсь опубликовать новый пакет, я получаю сообщение об ошибке:

Не удалось ПОМЕСТИТЬ полученный код состояния 422 с сервера: необработанный объект

Чтобы быть уверенным, что я ничего не изменил, я вернулся к git-тегу, из которого мне удалось успешно опубликовать пакет несколько дней назад, я изменил только версию для создания другого пакета. Я получаю ту же ошибку.

Я добавил журналы и вижу, что токен считан правильно, Все значения (ГРУППА, ВЕРСИЯ и т. Д.) Кажутся правильными и что файл, который я пытаюсь опубликовать, Находится в правильной папке. Я также пытался создать и использовать новый токен на случай, если что-то не так со старым, но это не помогло.

Отклонит ли GitHub публикацию с этой ошибкой в случае, если я опубликовал слишком много файлов? Я не нашел никакой документации об ошибке, которую вы получаете в этом случае.

Редактировать

Я также пытался создать новый проект и опубликовать его на случай, если что-то перепуталось в первоначальном, но это тоже не сработало.

Я попытался ПОМЕСТИТЬ файл напрямую, используя CURL, и это сработало, это означает, что токен указан правильно и что проблема не в ограничении общего размера опубликованных пакетов:

 curl -X PUT 
"https://maven.pkg.github.com/companyname/repositoryname/com/companyname/artifactid/v2.1.520/artifactid-v2.1.520.aar" 
-H "Authorization: token mytoken” 
--upload-file “/full/path/to/file.aar" -vvv
  

Конечно, это не решение, поскольку мне нужно опубликовать репозиторий maven с помощью pom и т. Д.

ЗАВЕРШЕНИЕ РЕДАКТИРОВАНИЯ

Вот моя конфигурация, которая работала долгое время и которая просто соответствует документации журналам, которые я добавил для изучения проблемы.

В build.gradle :

 allprojects {
    repositories {
        google()
        jcenter()
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/companyname/companyname-android-sdk")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("GitHubPackagesUsername")
                password = project.findProperty("gpr.key") ?: System.getenv("GitHubPackagesToken")
                println "GitHubPackages build.gradlentusername=$usernamenttoken=$password"
            }
        }
    }
}
  

в publish-artifacts.gradle :

 publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/companyname/companyname-android-sdk")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("GitHubPackagesUsername")
                password = project.findProperty("gpr.key") ?: System.getenv("GitHubPackagesToken")
                println "GitHubPackages Publish Artifact:ntusername=$usernamenttoken=$password"
            }
        }
    }

    publications {
        gpr(MavenPublication) {
            println "tskSdkVersion=$SK_SDK_VERSIONntarchivesBaseName=$archivesBaseNamentGROUP=$GROUPntdesciption=$POM_DESCRIPTION"
            println "artifact from $buildDir/outputs/aar/$archivesBaseName-${VARIANT_SUFFIX}.aar"
            groupId SK_GROUP
            version SK_SDK_VERSION
            artifactId archivesBaseName
            artifact "$buildDir/outputs/aar/$archivesBaseName-${VARIANT_SUFFIX}.aar"
            description POM_DESCRIPTION
            pom.packaging POM_PACKAGING
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.each {
                    println "dependency=$it"
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', it.group)
                    dependencyNode.appendNode('artifactId', it.name)
                    dependencyNode.appendNode('version', it.version)
                }
            }
        }
    }
}
  

в gradle.properties файле:

 POM_NAME=PackageName
POM_PACKAGING=aar
GROUP=com.companyname
POM_DESCRIPTION=CompanyName SDK Core library
  

VARIANT_SUFFIX задается из переменной env.

archivesBaseName устанавливается в модуле build.gradle

Комментарии:

1. Для чего gpr нужен блок?

2. @IgorGanapolsky он сообщает Gradle артефакты, которые необходимо опубликовать, с их файлом pom, объявляющим зависимости и т. Д. gpr это просто имя. У меня есть два: gpr и gprStaging

3. Где вы объявляете имена gpr и gprStaging ? Как gradle знает, как их интерпретировать.

4. @IgorGanapolsky вы объявляете это с помощью этой строки. Это (ужасный?) Отличный способ скрыть то, что вы на самом деле делаете. В kotlin это было бы create<MavenPublication>("gpr") { . Пожалуйста, проверьте: docs.gradle.org/current/userguide/publishing_maven.html

Ответ №1:

Не могли бы вы попробовать уменьшить свой идентификатор артефакта? Я столкнулся с той же проблемой, и ее использование в нижнем регистре заставило ее работать.

Ссылка: https://github.community/t/gradle-maven-deploy-failing-with-422-unprocessable-entity/137299/3

Комментарии:

1. Похоже, Github что-то здесь изменил. Либо они разрешили символы верхнего регистра, либо они переписали их в нижний регистр. В любом случае — это исправило мою сборку релиза, которая работала 4 месяца назад, без каких-либо изменений кода на моей стороне 🙂

2. Это больше не действует. Github изменил ее. Большинство ошибок 422 при публикации в пакетах GitHub, по-видимому, связаны с тем фактом, что артефакт уже связан с другим репозиторием (см. Ответ @gridcell-coder). Если вы используете gradle или mvn для публикации, вы видите только общий «Необработанный объект 422», но если вы выполняете запрос PUT напрямую (например, с помощью Postman), вы видите полную ошибку «Пакет xxx уже связан с другим репозиторием».

3. lol, это решило проблему для меня! Спасибо 1

Ответ №2:

В моем случае, когда у артефакта было имя api или service или serde он был заблокирован. например. это сработало <artifactId>database-ervice</artifactId> , это не служба базы данных

Редактировать: при использовании Postman для выполнения запроса put я получил

Package "io.XXX.mydomain.xyz-service" is already associated with another repository. итак, понял, что пакет был ранее отправлен в другое хранилище.

Крайне maven-deployer-plugin плохо передает сообщение об ошибке ответа PUT, поэтому пришлось использовать mintm для поиска URL и Postman для определения сообщения.

Комментарии:

1. Кажется, нет другого способа изменить имя артефакта / группы или удалить артефакты из предыдущего репозитория. Пользователь / организация может публиковать артефакты только с одной и той же комбинацией групп-артефактов из одного репозитория.