Опубликовать пакет Python с помощью GitHub Actions в AWS CodeArtifact

#github-actions #python-packaging #twine #aws-codeartifact

#github-действия #python-упаковка #шпагат #aws-codeartifact

Вопрос:

Мне трудно опубликовать пакет в AWS CodeArtifact. Проблема заключается в аутентификации.

Сначала я попытался выполнить вход в систему через aws cli, но из-за отсутствия файла .pypirc, содержащего настройки репозитория, это не сработало. Теперь я попытался сохранить токен и передать его в —repository-url, но в обоих случаях я заканчиваю тем, что процессу все равно требуется имя пользователя.

Отслеживание стека:

 File "/opt/hostedtoolcache/Python/3.9.1/x64/bin/twine", line 8, in <module>
    sys.exit(main())
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/__main__.py", line 28, in main
    result = cli.dispatch(sys.argv[1:])
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/cli.py", line 82, in dispatch
    return main(args.args)
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/commands/upload.py", line 154, in main
    return upload(upload_settings, parsed_args.dists)
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/commands/upload.py", line 91, in upload
    repository = upload_settings.create_repository()
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/settings.py", line 345, in create_repository
    self.username,
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/settings.py", line 146, in username
    return cast(Optional[str], self.auth.username)
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/auth.py", line 35, in username
    return utils.get_userpass_value(
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/utils.py", line 241, in get_userpass_value
    return prompt_strategy()
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/auth.py", line 81, in username_from_keyring_or_prompt
    return self.prompt("username", input)
  File "/opt/hostedtoolcache/Python/3.9.1/x64/lib/python3.9/site-packages/twine/auth.py", line 92, in prompt
    return how(f"Enter your {what}: ")
EOFError: EOF when reading a line
Enter your username: 
Error: Process completed with exit code 1.
 

Частичный github-action.yml:

 steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install setuptools wheel twine
        
    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_CA_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_CA_SECRET_ACCESS_KEY }}
        aws-region: eu-central-1
       
    - name: Build and publish   
      run: |
        token=$(aws codeartifact get-authorization-token --domain foobar --domain-owner 123456678901 --query authorizationToken --output text)
        python setup.py sdist bdist_wheel
        twine upload --repository-url https://aws:$token@foobar-123456678901.d.codeartifact.eu-central-1.amazonaws.com/pypi/my-repo/simple dist/*
 

Ответ №1:

Вам необходимо передать в twine правильные значения аутентификации, попробуйте выполнить следующие действия:

 twine upload --repository-url https://foobar-123456678901.d.codeartifact.eu-central-1.amazonaws.com/pypi/my-repo/simple --username aws --password $token dist/*
 

смотрите: https://twine.readthedocs.io/en/latest/#commands

Ответ №2:

Интерфейс командной строки AWS позволяет настраивать учетные twine данные, поэтому вам не нужно передавать их явно.

     - name: Build and publish
      run: |
        aws codeartifact login --tool twine --domain foobar --repository my-repo
        python setup.py sdist bdist_wheel
        twine upload --repository codeartifact dist/*
 

Ссылки:

https://docs.aws.amazon.com/codeartifact/latest/ug/python-configure.html

https://docs.aws.amazon.com/codeartifact/latest/ug/python-run-twine.html