Compare commits
1 Commits
a424fe5b66
...
a853a574a0
Author | SHA1 | Date |
---|---|---|
Sebastian Weigand | a853a574a0 |
|
@ -1,54 +0,0 @@
|
||||||
---
|
|
||||||
|
|
||||||
name: 🏗️
|
|
||||||
|
|
||||||
on: # yamllint disable-line rule:truthy
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches: ["release/*", "unstable/*"]
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
tag:
|
|
||||||
description: Docker image tag
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
smoke-test:
|
|
||||||
uses: ./.github/workflows/reusable-smoke-test.yml
|
|
||||||
build-and-push:
|
|
||||||
if: github.event_name != 'pull_request'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs:
|
|
||||||
- smoke-test
|
|
||||||
timeout-minutes: 10
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Build Docker image
|
|
||||||
run: |
|
|
||||||
DOCKER_TAG="${DOCKER_TAG/'/'/'-'}"
|
|
||||||
DOCKER_TAG_MAJOR=$(echo "$DOCKER_TAG" | cut -d '.' -f 1)
|
|
||||||
DOCKER_TAG_MAJOR_MINOR=$(echo "$DOCKER_TAG" | cut -d '.' -f 1-2)
|
|
||||||
IMAGE="ghcr.io/$GITHUB_REPOSITORY:${DOCKER_TAG}"
|
|
||||||
IMAGE_MAJOR="ghcr.io/$GITHUB_REPOSITORY:${DOCKER_TAG_MAJOR}"
|
|
||||||
IMAGE_MAJOR_MINOR="ghcr.io/$GITHUB_REPOSITORY:${DOCKER_TAG_MAJOR_MINOR}"
|
|
||||||
echo "IMAGE=$IMAGE" >>"$GITHUB_ENV"
|
|
||||||
echo "IMAGE_MAJOR=$IMAGE_MAJOR" >>"$GITHUB_ENV"
|
|
||||||
echo "IMAGE_MAJOR_MINOR=$IMAGE_MAJOR_MINOR" >>"$GITHUB_ENV"
|
|
||||||
docker build . \
|
|
||||||
--build-arg BUILDKIT_INLINE_CACHE=1 \
|
|
||||||
--cache-from $IMAGE \
|
|
||||||
--tag $IMAGE
|
|
||||||
docker tag $IMAGE $IMAGE_MAJOR
|
|
||||||
docker tag $IMAGE $IMAGE_MAJOR_MINOR
|
|
||||||
env:
|
|
||||||
DOCKER_TAG: ${{ inputs.tag || github.ref_name }}
|
|
||||||
- name: Log in to GHCR
|
|
||||||
run: >-
|
|
||||||
echo ${{ secrets.GITHUB_TOKEN }} |
|
|
||||||
docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
|
|
||||||
- name: Push Docker image to GHCR
|
|
||||||
run: |
|
|
||||||
docker push $IMAGE
|
|
||||||
docker push $IMAGE_MAJOR
|
|
||||||
docker push $IMAGE_MAJOR_MINOR
|
|
|
@ -1,9 +1,10 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
name: ♻️ 🧪
|
name: 🧪
|
||||||
|
|
||||||
on: # yamllint disable-line rule:truthy
|
on: # yamllint disable-line rule:truthy
|
||||||
workflow_call:
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
devpi-password: abcd1234
|
devpi-password: abcd1234
|
||||||
|
@ -26,33 +27,7 @@ env:
|
||||||
PYTEST_THEME_MODE
|
PYTEST_THEME_MODE
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
fail-fast:
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [macos-latest, windows-latest]
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
timeout-minutes: 2
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Check out the action locally
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: test
|
|
||||||
- name: Fail-fast in unsupported environments
|
|
||||||
continue-on-error: true
|
|
||||||
id: fail-fast
|
|
||||||
uses: ./test
|
|
||||||
- name: Error if action did not fail-fast in unsupported environments
|
|
||||||
if: steps.fail-fast.outcome == 'success'
|
|
||||||
run: |
|
|
||||||
>&2 echo This action should fail-fast in unsupported environments.
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
smoke-test:
|
smoke-test:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
services:
|
services:
|
|
@ -279,7 +279,7 @@ are released under the [BSD 3-clause license](LICENSE.md).
|
||||||
|
|
||||||
|
|
||||||
[🧪 GitHub Actions CI/CD workflow tests badge]:
|
[🧪 GitHub Actions CI/CD workflow tests badge]:
|
||||||
https://github.com/pypa/gh-action-pypi-publish/actions/workflows/build-and-push-docker-image.yml/badge.svg?branch=unstable%2Fv1&event=push
|
https://github.com/pypa/gh-action-pypi-publish/actions/workflows/self-smoke-test-action.yml/badge.svg?branch=unstable%2Fv1&event=push
|
||||||
[GHA workflow runs list]:
|
[GHA workflow runs list]:
|
||||||
https://github.com/pypa/gh-action-pypi-publish/actions/workflows/self-smoke-test-action.yml?query=branch%3Aunstable%2Fv1
|
https://github.com/pypa/gh-action-pypi-publish/actions/workflows/self-smoke-test-action.yml?query=branch%3Aunstable%2Fv1
|
||||||
|
|
||||||
|
|
79
action.yml
79
action.yml
|
@ -91,70 +91,15 @@ branding:
|
||||||
color: yellow
|
color: yellow
|
||||||
icon: upload-cloud
|
icon: upload-cloud
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: docker
|
||||||
steps:
|
image: Dockerfile
|
||||||
- name: Fail-fast in unsupported environments
|
args:
|
||||||
if: runner.os != 'Linux'
|
- ${{ inputs.user }}
|
||||||
run: |
|
- ${{ inputs.password }}
|
||||||
>&2 echo This action is only able to run under GNU/Linux environments
|
- ${{ inputs.repository-url }}
|
||||||
exit 1
|
- ${{ inputs.packages-dir }}
|
||||||
shell: bash -eEuo pipefail {0}
|
- ${{ inputs.verify-metadata }}
|
||||||
- name: Reset path if needed
|
- ${{ inputs.skip-existing }}
|
||||||
run: |
|
- ${{ inputs.verbose }}
|
||||||
# Reset path if needed
|
- ${{ inputs.print-hash }}
|
||||||
# https://github.com/pypa/gh-action-pypi-publish/issues/112
|
- ${{ inputs.attestations }}
|
||||||
if [[ $PATH != *"/usr/bin"* ]]; then
|
|
||||||
echo "\$PATH=$PATH. Resetting \$PATH for GitHub Actions."
|
|
||||||
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
echo "PATH=$PATH" >>"$GITHUB_ENV"
|
|
||||||
echo "$PATH" >>"$GITHUB_PATH"
|
|
||||||
echo "\$PATH reset. \$PATH=$PATH"
|
|
||||||
fi
|
|
||||||
shell: bash
|
|
||||||
- name: Set repo and ref from which to run Docker container action
|
|
||||||
id: set-repo-and-ref
|
|
||||||
run: |
|
|
||||||
# Set repo and ref from which to run Docker container action
|
|
||||||
# to handle cases in which `github.action_` context is not set
|
|
||||||
# https://github.com/actions/runner/issues/2473
|
|
||||||
REF=${{ env.ACTION_REF || env.PR_REF || github.ref_name }}
|
|
||||||
REPO=${{ env.ACTION_REPO || env.PR_REPO || github.repository }}
|
|
||||||
REPO_ID=${{ env.PR_REPO_ID || github.repository_id }}
|
|
||||||
echo "ref=$REF" >>"$GITHUB_OUTPUT"
|
|
||||||
echo "repo=$REPO" >>"$GITHUB_OUTPUT"
|
|
||||||
echo "repo-id=$REPO_ID" >>"$GITHUB_OUTPUT"
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
ACTION_REF: ${{ github.action_ref }}
|
|
||||||
ACTION_REPO: ${{ github.action_repository }}
|
|
||||||
PR_REF: ${{ github.event.pull_request.head.ref }}
|
|
||||||
PR_REPO: ${{ github.event.pull_request.head.repo.full_name }}
|
|
||||||
PR_REPO_ID: ${{ github.event.pull_request.base.repo.id }}
|
|
||||||
- name: Check out action repo
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: action-repo
|
|
||||||
ref: ${{ steps.set-repo-and-ref.outputs.ref }}
|
|
||||||
repository: ${{ steps.set-repo-and-ref.outputs.repo }}
|
|
||||||
- name: Create Docker container action
|
|
||||||
run: |
|
|
||||||
# Create Docker container action
|
|
||||||
python create-docker-action.py
|
|
||||||
env:
|
|
||||||
REF: ${{ steps.set-repo-and-ref.outputs.ref }}
|
|
||||||
REPO: ${{ steps.set-repo-and-ref.outputs.repo }}
|
|
||||||
REPO_ID: ${{ steps.set-repo-and-ref.outputs.repo-id }}
|
|
||||||
shell: bash
|
|
||||||
working-directory: action-repo
|
|
||||||
- name: Run Docker container
|
|
||||||
uses: ./action-repo/.github/actions/run-docker-container
|
|
||||||
with:
|
|
||||||
user: ${{ inputs.user }}
|
|
||||||
password: ${{ inputs.password }}
|
|
||||||
repository-url: ${{ inputs.repository-url || inputs.repository_url }}
|
|
||||||
packages-dir: ${{ inputs.packages-dir || inputs.packages_dir }}
|
|
||||||
verify-metadata: ${{ inputs.verify-metadata || inputs.verify_metadata }}
|
|
||||||
skip-existing: ${{ inputs.skip-existing || inputs.skip_existing }}
|
|
||||||
verbose: ${{ inputs.verbose }}
|
|
||||||
print-hash: ${{ inputs.print-hash || inputs.print_hash }}
|
|
||||||
attestations: ${{ inputs.attestations }}
|
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import pathlib
|
|
||||||
|
|
||||||
DESCRIPTION = 'description'
|
|
||||||
REQUIRED = 'required'
|
|
||||||
|
|
||||||
REF = os.environ['REF']
|
|
||||||
REPO = os.environ['REPO']
|
|
||||||
REPO_ID = os.environ['REPO_ID']
|
|
||||||
REPO_ID_GH_ACTION = '178055147'
|
|
||||||
|
|
||||||
|
|
||||||
def set_image(ref: str, repo: str, repo_id: str) -> str:
|
|
||||||
if repo_id == REPO_ID_GH_ACTION:
|
|
||||||
return '../../../Dockerfile'
|
|
||||||
docker_ref = ref.replace('/', '-')
|
|
||||||
return f'docker://ghcr.io/{repo}:{docker_ref}'
|
|
||||||
|
|
||||||
|
|
||||||
image = set_image(REF, REPO, REPO_ID)
|
|
||||||
|
|
||||||
action = {
|
|
||||||
'name': '🏃',
|
|
||||||
DESCRIPTION: (
|
|
||||||
'Run Docker container to upload Python distribution packages to PyPI'
|
|
||||||
),
|
|
||||||
'inputs': {
|
|
||||||
'user': {DESCRIPTION: 'PyPI user', REQUIRED: False},
|
|
||||||
'password': {
|
|
||||||
DESCRIPTION: 'Password for your PyPI user or an access token',
|
|
||||||
REQUIRED: False,
|
|
||||||
},
|
|
||||||
'repository-url': {
|
|
||||||
DESCRIPTION: 'The repository URL to use',
|
|
||||||
REQUIRED: False,
|
|
||||||
},
|
|
||||||
'packages-dir': {
|
|
||||||
DESCRIPTION: 'The target directory for distribution',
|
|
||||||
REQUIRED: False,
|
|
||||||
},
|
|
||||||
'verify-metadata': {
|
|
||||||
DESCRIPTION: 'Check metadata before uploading',
|
|
||||||
REQUIRED: False,
|
|
||||||
},
|
|
||||||
'skip-existing': {
|
|
||||||
DESCRIPTION: (
|
|
||||||
'Do not fail if a Python package distribution'
|
|
||||||
' exists in the target package index'
|
|
||||||
),
|
|
||||||
REQUIRED: False,
|
|
||||||
},
|
|
||||||
'verbose': {DESCRIPTION: 'Show verbose output.', REQUIRED: False},
|
|
||||||
'print-hash': {
|
|
||||||
DESCRIPTION: 'Show hash values of files to be uploaded',
|
|
||||||
REQUIRED: False,
|
|
||||||
},
|
|
||||||
'attestations': {
|
|
||||||
DESCRIPTION: (
|
|
||||||
'[EXPERIMENTAL]'
|
|
||||||
' Enable experimental support for PEP 740 attestations.'
|
|
||||||
' Only works with PyPI and TestPyPI via Trusted Publishing.'
|
|
||||||
),
|
|
||||||
REQUIRED: False,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'runs': {
|
|
||||||
'using': 'docker',
|
|
||||||
'image': image,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
action_path = pathlib.Path('.github/actions/run-docker-container/action.yml')
|
|
||||||
action_path.parent.mkdir(parents=True, exist_ok=True)
|
|
||||||
action_path.write_text(json.dumps(action, ensure_ascii=False), encoding='utf-8')
|
|
Loading…
Reference in New Issue