Added index_url to inputs and to use as build-arg for container #15
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: pipeline_on_tag | |
on: | |
push: | |
tags: | |
# Semver (with optional dev extension (-dev) | |
# - 'v[0-9]+\.[0-9]+\.[0-9]+(?:-.*)?' | |
- 'v*' | |
jobs: | |
setup: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash -l {0} | |
steps: | |
# Checkout code | |
- name: Checkout code | |
id: git_checkout | |
uses: actions/checkout@v4 | |
# Get the tag based on the GITHUB REF env var | |
- id: get_tag | |
run: | | |
echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT | |
# Check pre release regex match | |
- id: tag_regex_match | |
uses: kaisugi/[email protected] | |
with: | |
text: ${{ steps.get_tag.outputs.tag }} | |
regex: '^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$' | |
# Check tag regex match | |
- id: check_match | |
if: steps.check_tag.outputs.match == 'false' | |
run: | | |
echo "Tag not semver tag" 1>&2 | |
exit 1 | |
- id: verify_versions | |
run: | | |
# Install toml | |
pip install toml | |
pyproject_version="$( \ | |
python <<END | |
import toml | |
with open("pyproject.toml", "r") as f_h: | |
data = toml.load(f_h) | |
print("v"+data.get("project").get("version")) | |
END | |
)" | |
# TODO - consider -dev extension on toml and we override it? | |
# OR we create our own extension? | |
if [[ "${pyproject_version}" != "${{ steps.get_tag.outputs.tag }}" ]]; then | |
echo "version in pyproject.toml and tag do not match! Exiting" 2>&1 | |
exit 1 | |
fi | |
# Is Pre Release | |
- id: is_pre_release | |
run: | | |
is_pre_release="false" | |
if [[ -n "${{ steps.tag_regex_match.outputs.group1 }}" ]]; then | |
is_pre_release="true" | |
fi | |
echo "is_pre_release=${is_pre_release}" >> "${GITHUB_OUTPUT}" | |
# PyPi Outputs | |
- id: get_repository_and_index_url | |
run: | | |
pypi_repository="pypi" | |
pypi_repository_url="https://upload.pypi.org/" | |
index_url="https://pypi.org/simple/" | |
if [[ "${{ steps.is_pre_release.outputs.is_pre_release }}" == "true" ]]; then | |
pypi_repository="testpypi" | |
pypi_repository_url="https://test.pypi.org/legacy/" | |
index_url="https://test.pypi.org/simple/" | |
fi | |
echo "pypi_repository=${pypi_repository}" >> "${GITHUB_OUTPUT}" | |
echo "pypi_repository_url=${pypi_repository_url}" >> "${GITHUB_OUTPUT}" | |
echo "index_url=${index_url}" >> "${GITHUB_OUTPUT}" | |
# Docker Container | |
- id: get_docker_container_tags | |
run: | | |
docker_container_uri_str_list="ghcr.io/${{ github.repository }}:${{ steps.get_tag.outputs.tag }}" | |
if [[ "${{ steps.is_pre_release.outputs.is_pre_release }}" == "false" ]]; then | |
docker_container_uri_str_list="${docker_container_uri_str_list},ghcr.io/${{ github.repository }}:latest" | |
fi | |
echo "docker_container_uri_str_list=${docker_container_uri_str_list}" >> "${GITHUB_OUTPUT}" | |
- id: get_environment | |
run: | | |
environment="development" | |
if [[ "${{ steps.is_pre_release.outputs.is_pre_release }}" == "false" ]]; then | |
environment="production" | |
fi | |
echo "environment=${environment}" >> "${GITHUB_OUTPUT}" | |
# Set outputs of setup job | |
outputs: | |
git_tag: ${{ steps.get_tag.outputs.tag }} | |
is_pre_release: ${{ steps.is_pre_release.outputs.is_pre_release }} | |
pypi_repository: ${{ steps.get_repository_and_index_url.outputs.pypi_repository }} | |
pypi_repository_url: ${{ steps.get_repository_and_index_url.outputs.pypi_repository_url }} | |
index_url: ${{ steps.get_repository_and_index_url.outputs.index_url }} | |
docker_container_uri_str_list: ${{ steps.get_docker_container_tags.outputs.docker_container_uri_str_list }} | |
environment: ${{ steps.get_environment.outputs.environment }} | |
# Run tests and generate report | |
test: | |
needs: | |
- setup | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash -l {0} | |
steps: | |
- id: git_checkout | |
uses: actions/checkout@v4 | |
- id: setup_python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
- id: run_make_test | |
run: | | |
make test | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: coverage_report | |
path: coverage_report.txt | |
# Build package | |
build_package_wheels: | |
needs: | |
- setup | |
- test | |
uses: ./.github/workflows/build_package.yml | |
# Build package and make release on GitHub | |
build_release: | |
needs: | |
- setup | |
- test | |
- build_package_wheels | |
uses: ./.github/workflows/build_release.yml | |
with: | |
git_tag: ${{ needs.setup.outputs.git_tag }} | |
coverage_report_artifacts_name: coverage_report | |
coverage_report_artifacts_path: coverage_report.txt | |
dist_artifacts_name: dist | |
dist_artifacts_path: dist | |
# Now publish on pypi (or test-pypi if this is a dev release) | |
# This only occurs after release on GitHub | |
publish_pypi: | |
needs: | |
- setup | |
- test | |
- build_package_wheels | |
- build_release | |
uses: ./.github/workflows/publish_pypi.yml | |
with: | |
git_tag: ${{ needs.setup.outputs.git_tag }} | |
is_pre_release: ${{ needs.setup.outputs.is_pre_release }} | |
pypi_repository: ${{ needs.setup.outputs.pypi_repository }} | |
pypi_repository_url: ${{ needs.setup.outputs.pypi_repository_url }} | |
dist_artifacts_name: dist | |
dist_artifacts_path: dist | |
environment: ${{ needs.setup.outputs.environment }} | |
# Now build container | |
build_container: | |
needs: | |
- setup | |
- test | |
- build_package_wheels | |
- build_release | |
- publish_pypi | |
uses: ./.github/workflows/build_container.yml | |
with: | |
git_tag: ${{ needs.setup.outputs.git_tag }} | |
index_url: ${{ needs.setup.outputs.index_url }} | |
docker_container_uri_str_list: ${{ needs.setup.outputs.docker_container_uri_str_list }} |