С тех пор, как мы обновили Artifactory до версии 6.12.1, при публикации наших пакетов node.js появилось новое поведение. Вот как в основном выглядит наш package.json (некоторые данные были изменены для обеспечения конфиденциальности):
{
"name": "@org/module-test",
"version": "1.0.0-12345",
"description": "Module's description",
"scripts": {
<scripts>
},
"repository": {
"type": "git",
"url": "<git repo url>"
},
"license": "UNLICENSED",
"devDependencies": {
"husky": "^1.3.1"
},
"publishConfig": {
"registry": "https://<artifactory_url>/api/npm/npm-local/",
"_auth": "<API token>"
},
"files": [
"<app-folder>"
],
"husky": {
"hooks": {
<several hooks>
}
}
}
Важной частью здесь является параметр версии. Если я выполню npm publish
, в этой конфигурации все будет работать нормально, а файлы json и tgz имеют одинаковое имя. Однако, когда версия выглядит следующим образом:
"version": "1.0.0-123abc"
Имя файла tgz как таковое, но версия на вкладке npm info и соответствующая json файлы записываются так:
module-test-1.0.0-123-abc.json
Каждый раз, когда в версии есть цифры и буквы в этом формате, добавляется тире (-), что мешает нам автоматизировать наши конвейеры, использующие эти пакеты. Это проблематично, потому что мы вводим наши хиты git commit в качестве номера версии, поэтому всякий раз, когда хеш начинается с цифр и начинается с букв, проблема возникает.
Проблема не возникала в нашей предыдущей версии 6.1.0. Никаких существенных различий между предыдущим и фактическим конфигом нет, что касается репозиториев npm. Несмотря на проблемный номер версии, в файле event.log
показано следующее:
1569867062896|create|npm-local/@org/module-test/-/@org/module-test-1.0.0-123abc.tgz
1569867062896|props|npm-local/@org/module-test/-/@org/module-test-1.0.0-123abc.tgz
1569867062896|create|npm-local/.npm/@org/module-test/@org/module-test-1.0.0-123-abc.json
1569867062896|props|npm-local/@org/module-test/-/@org/module-test-1.0.0-123abc.tgz
1569867063055|props|npm-local/@org/module-test/-/@org/module-test-1.0.0-12abc.tgz
Как мы видим, изменено только имя файла json.
Проблема исчезнет, если мы вставим символьную строку между основной версией и subversion, например, так:
"version":"1.0.0-string-123abc"
Это должен быть временный обходной путь, поскольку он не"чистый" идентификатор версии по нашим стандартам.
Не уверен, что это связано, но это макет репозитория npm-default, используемый репозиторием npm-local:
<repoLayout>
<name>npm-default</name>
<artifactPathPattern>[orgPath]/[module]/[module]-[baseRev](-[fileItegRev]).tgz</artifactPathPattern>
<distinctiveDescriptorPathPattern>false</distinctiveDescriptorPathPattern>
<folderIntegrationRevisionRegExp>.*</folderIntegrationRevisionRegExp>
<fileIntegrationRevisionRegExp>.*</fileIntegrationRevisionRegExp>
</repoLayout>
Документацияиз repoLayout можно найти здесь
Мы бы хотели, чтобы файл json, архив tgz и идентификатор версии оставались неизменными, независимо от того, какой может быть номер версии. Почему эта черта добавлена, мы не знаем, но нам нужно, чтобы она исчезла. Это новая конфигурация, о которой мы не знаем, или ошибка?