mirror of
https://github.com/pypa/gh-action-pypi-publish.git
synced 2024-11-22 00:21:08 -05:00
783267be69
Up to this point, the project has been set up as a Docker action referencing the Dockerfile. The downside to using the Dockerfile for the action is that the Docker image must be built every time the action is used. This commit will set up the project to build the Docker image and push it to GitHub Container Registry (GHCR). This change will speed up user workflows every time the action is used because the workflows will simply pull the Docker image from GHCR instead of building again. Changes: - Add required metadata to Dockerfile - Build container image with GitHub Actions - Push container image to GHCR Docker actions support pulling in pre-built Docker images. The downside is that there's no way to specify the correct Docker tag because the GitHub Actions `image` and `uses:` keys don't accept any context. For example, if a user's workflow has `uses: pypa/gh-action-pypi-publish@release/v1.8`, then the action should pull in a Docker image built from the `release/v1.8` branch, something like `ghcr.io/pypa/gh-action-pypi-publish:release-v1.8` (Docker tags can't have `/`). The workaround is to switch the top-level `action.yml` to a composite action that then calls the Docker action, substituting the correct image name and tag.
102 lines
2.8 KiB
YAML
102 lines
2.8 KiB
YAML
---
|
|
|
|
name: 🧪
|
|
|
|
on: # yamllint disable-line rule:truthy
|
|
pull_request:
|
|
workflow_run:
|
|
workflows: [🏗️]
|
|
types: [completed]
|
|
|
|
env:
|
|
devpi-password: abcd1234
|
|
devpi-username: root
|
|
devpi-port: 3141
|
|
|
|
FORCE_COLOR: 1 # Request colored output from CLI tools supporting it
|
|
MYPY_FORCE_COLOR: 1 # MyPy's color enforcement
|
|
PIP_DISABLE_PIP_VERSION_CHECK: 1
|
|
PIP_NO_PYTHON_VERSION_WARNING: 1
|
|
PIP_NO_WARN_SCRIPT_LOCATION: 1
|
|
PY_COLORS: 1 # Recognized by the `py` package, dependency of `pytest`
|
|
TOX_PARALLEL_NO_SPINNER: 1
|
|
TOX_TESTENV_PASSENV: >- # Make tox-wrapped tools see color requests
|
|
FORCE_COLOR
|
|
MYPY_FORCE_COLOR
|
|
NO_COLOR
|
|
PY_COLORS
|
|
PYTEST_THEME
|
|
PYTEST_THEME_MODE
|
|
|
|
jobs:
|
|
smoke-test:
|
|
if: >-
|
|
github.event_name == 'pull_request' ||
|
|
github.event.workflow_run.conclusion == 'success'
|
|
runs-on: ubuntu-latest
|
|
|
|
services:
|
|
devpi:
|
|
image: muccg/devpi
|
|
env:
|
|
DEVPI_PASSWORD: ${{ env.devpi-password }}
|
|
ports:
|
|
- 3141
|
|
|
|
timeout-minutes: 2
|
|
|
|
steps:
|
|
- name: Check out the action locally
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: test
|
|
- name: Install the packaging-related tools
|
|
run: python3 -m pip install build twine
|
|
env:
|
|
PIP_CONSTRAINT: test/requirements/runtime.txt
|
|
- name: Create the stub package importable directory
|
|
run: mkdir -pv src/test_package
|
|
- name: Populate the stub package `__init__.py`
|
|
run: echo '__version__ = "0.1"' > src/test_package/__init__.py
|
|
- name: Populate the stub package `README.md`
|
|
run: echo "# Test Package" > README.md
|
|
- name: Populate the stub package `pyproject.toml`
|
|
run: echo "$CONTENTS" > pyproject.toml
|
|
env:
|
|
CONTENTS: |
|
|
[build-system]
|
|
requires = [
|
|
"setuptools == 65.6.3",
|
|
]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "test-package"
|
|
version = "0.1"
|
|
readme = "README.md"
|
|
- name: Build the stub package sdist and wheel distributions
|
|
run: python3 -m build
|
|
- name: Register the stub package in devpi
|
|
run: twine register dist/*.tar.gz
|
|
env:
|
|
TWINE_USERNAME: ${{ env.devpi-username }}
|
|
TWINE_PASSWORD: ${{ env.devpi-password }}
|
|
TWINE_REPOSITORY_URL: >-
|
|
http://localhost:${{
|
|
job.services.devpi.ports[env.devpi-port]
|
|
}}/${{
|
|
env.devpi-username
|
|
}}/public/
|
|
- name: ✅ Smoke-test the locally checked out action
|
|
uses: ./test
|
|
env:
|
|
DEBUG: >-
|
|
true
|
|
PATH: utter-nonsense
|
|
with:
|
|
user: ${{ env.devpi-username }}
|
|
password: ${{ env.devpi-password }}
|
|
repository-url: >-
|
|
http://devpi:${{ env.devpi-port }}/${{ env.devpi-username }}/public/
|
|
|
|
...
|