Merging upstream version 0.19.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
61e6dccee9
commit
2efee3d3ab
111 changed files with 2058 additions and 1676 deletions
176
.github/workflows/publish-release.yml
vendored
Normal file
176
.github/workflows/publish-release.yml
vendored
Normal file
|
@ -0,0 +1,176 @@
|
|||
name: Publish Release
|
||||
run-name: "Publish Release (pypi_target=${{ inputs.pypi_target }}, repo_release_ref=${{ inputs.repo_release_ref }})"
|
||||
|
||||
on:
|
||||
# Trigger release workflow from other workflows (e.g. release dev build as part of CI)
|
||||
workflow_call:
|
||||
inputs:
|
||||
pypi_target:
|
||||
description: "PyPI repository to publish to"
|
||||
required: true
|
||||
type: string
|
||||
default: "test.pypi.org"
|
||||
repo_release_ref:
|
||||
description: "Gitlint git reference to publish release for"
|
||||
type: string
|
||||
default: "main"
|
||||
|
||||
# Manually trigger a release
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pypi_target:
|
||||
description: "PyPI repository to publish to"
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- "pypi.org"
|
||||
- "test.pypi.org"
|
||||
default: "test.pypi.org"
|
||||
repo_release_ref:
|
||||
description: "Gitlint git reference to publish release for"
|
||||
type: string
|
||||
default: "main"
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
timeout-minutes: 15
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
gitlint_version: ${{ steps.set_version.outputs.gitlint_version }}
|
||||
steps:
|
||||
- name: Setup python
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: "3.11"
|
||||
|
||||
- name: Install pypa/build
|
||||
run: python -m pip install build==0.10.0
|
||||
|
||||
- name: Install Hatch
|
||||
run: python -m pip install hatch==1.6.3
|
||||
|
||||
- uses: actions/checkout@v3.3.0
|
||||
with:
|
||||
ref: ${{ inputs.repo_release_ref }}
|
||||
fetch-depth: 0 # checkout all history, needed for hatch versioning
|
||||
|
||||
# Run hatch version once to avoid additional output ("Setting up build environment for missing dependencies")
|
||||
# during the next step
|
||||
- name: Hatch version
|
||||
run: hatch version
|
||||
|
||||
# Hatch versioning is based on git (using hatch-vcs). If there is no explicit tag for the commit we're trying to
|
||||
# publish, hatch versioning strings will have this format: 0.19.0.dev52+g9f7dc7d
|
||||
# With the string after '+' being the 'g<short-sha>' of the commit.
|
||||
#
|
||||
# However, PyPI doesn't allow '+' in version numbers (no PEP440 local versions allowed on PyPI).
|
||||
# To work around this, we override the version string by setting the SETUPTOOLS_SCM_PRETEND_VERSION env var
|
||||
# to the version string without the '+' and everything after it.
|
||||
# We do this by setting the `gitlint_version` step output here and re-using it later to
|
||||
# set SETUPTOOLS_SCM_PRETEND_VERSION.
|
||||
#
|
||||
# We only actually publish such releases on the main branch to guarantee the dev numbering scheme remains
|
||||
# unique.
|
||||
# Note that when a tag *is* present (i.e. v0.19.0), hatch versioning will return the tag name (i.e. 0.19.0)
|
||||
# and this step has no effect, ie. SETUPTOOLS_SCM_PRETEND_VERSION will be the same as `hatch version`.
|
||||
- name: Set SETUPTOOLS_SCM_PRETEND_VERSION
|
||||
id: set_version
|
||||
run: |
|
||||
echo "gitlint_version=$(hatch version | cut -d+ -f1)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build (gitlint-core)
|
||||
run: python -m build
|
||||
working-directory: ./gitlint-core
|
||||
env:
|
||||
SETUPTOOLS_SCM_PRETEND_VERSION: ${{ steps.set_version.outputs.gitlint_version }}
|
||||
|
||||
- name: Build (gitlint)
|
||||
run: python -m build
|
||||
env:
|
||||
SETUPTOOLS_SCM_PRETEND_VERSION: ${{ steps.set_version.outputs.gitlint_version }}
|
||||
|
||||
- name: Publish gitlint-core (pypi.org)
|
||||
run: hatch publish
|
||||
working-directory: ./gitlint-core
|
||||
env:
|
||||
HATCH_INDEX_USER: ${{ secrets.PYPI_GITLINT_CORE_USERNAME }}
|
||||
HATCH_INDEX_AUTH: ${{ secrets.PYPI_GITLINT_CORE_PASSWORD }}
|
||||
if: inputs.pypi_target == 'pypi.org'
|
||||
|
||||
- name: Publish gitlint (pypi.org)
|
||||
run: hatch publish
|
||||
env:
|
||||
HATCH_INDEX_USER: ${{ secrets.PYPI_GITLINT_USERNAME }}
|
||||
HATCH_INDEX_AUTH: ${{ secrets.PYPI_GITLINT_PASSWORD }}
|
||||
if: inputs.pypi_target == 'pypi.org'
|
||||
|
||||
- name: Publish gitlint-core (test.pypi.org)
|
||||
run: hatch publish -r test
|
||||
working-directory: ./gitlint-core
|
||||
env:
|
||||
HATCH_INDEX_USER: ${{ secrets.TEST_PYPI_GITLINT_CORE_USERNAME }}
|
||||
HATCH_INDEX_AUTH: ${{ secrets.TEST_PYPI_GITLINT_CORE_PASSWORD }}
|
||||
if: inputs.pypi_target == 'test.pypi.org'
|
||||
|
||||
- name: Publish gitlint (test.pypi.org)
|
||||
run: hatch publish -r test
|
||||
env:
|
||||
HATCH_INDEX_USER: ${{ secrets.TEST_PYPI_GITLINT_USERNAME }}
|
||||
HATCH_INDEX_AUTH: ${{ secrets.TEST_PYPI_GITLINT_PASSWORD }}
|
||||
if: inputs.pypi_target == 'test.pypi.org'
|
||||
|
||||
# Wait for gitlint package to be available in PyPI for installation
|
||||
wait-for-package:
|
||||
needs:
|
||||
- publish
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- name: Install gitlint
|
||||
uses: nick-fields/retry@v2.8.3
|
||||
with:
|
||||
timeout_minutes: 1
|
||||
max_attempts: 10
|
||||
command: |
|
||||
python -m pip install gitlint==${{ needs.publish.outputs.gitlint_version }}
|
||||
if: inputs.pypi_target == 'pypi.org'
|
||||
|
||||
- name: Install gitlint (test.pypi.org)
|
||||
uses: nick-fields/retry@v2.8.3
|
||||
with:
|
||||
timeout_minutes: 1
|
||||
max_attempts: 10
|
||||
command: |
|
||||
pip install --no-cache-dir -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple gitlint==${{ needs.publish.outputs.gitlint_version }}
|
||||
if: inputs.pypi_target == 'test.pypi.org'
|
||||
|
||||
- name: gitlint --version
|
||||
run: |
|
||||
gitlint --version
|
||||
[ "$(gitlint --version)" == "gitlint, version ${{ needs.publish.outputs.gitlint_version }}" ]
|
||||
|
||||
# Unfortunately, it's not because the newly published package installation worked once that replication
|
||||
# has finished amongst all PyPI servers (subsequent installations might still fail). We sleep for 10 min here
|
||||
# to increase the odds that replication has finished.
|
||||
- name: Sleep
|
||||
run: sleep 600
|
||||
|
||||
test-release:
|
||||
needs:
|
||||
- publish
|
||||
- wait-for-package
|
||||
uses: ./.github/workflows/test-release.yml
|
||||
with:
|
||||
gitlint_version: ${{ needs.publish.outputs.gitlint_version }}
|
||||
pypi_source: ${{ inputs.pypi_target }}
|
||||
repo_test_ref: ${{ inputs.repo_release_ref }}
|
||||
|
||||
publish-docker:
|
||||
needs:
|
||||
- publish
|
||||
- test-release
|
||||
uses: ./.github/workflows/publish-docker.yml
|
||||
secrets: inherit # pass all secrets (required to access secrets in a called workflow)
|
||||
with:
|
||||
gitlint_version: ${{ needs.publish.outputs.gitlint_version }}
|
||||
docker_image_tag: "latest_dev"
|
||||
push_to_dockerhub: true
|
Loading…
Add table
Add a link
Reference in a new issue