Publish Python Package via GitHub Actions to AWS CodeArtifact

Viewed 1726

I have a hard time to publish a package to AWS CodeArtifact. Problem is the authentification.

First I tried to execute the login via the aws cli but due to the lack of the .pypirc file containing the repository settings that didn't work out. Now I tried to store the token and feed it into the --repository-url but in both cases I end up that the process wants a username anyway.

Stacktrace:

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.

Partial 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/*
2 Answers

You need to pass to twine the correct authentication values, try with the following:

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

see: https://twine.readthedocs.io/en/latest/#commands

Related