Merge pull request #19 from gaul/readme #13
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: Run CI | |
on: [push, pull_request] | |
permissions: | |
contents: write | |
packages: write | |
jobs: | |
unit-tests: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12-dev", "pypy-3.8", "pypy-3.9", "pypy-3.10"] | |
os: [ubuntu-22.04, macOS-latest, windows-latest] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
# from https://github.com/actions/cache/blob/main/examples.md#python---pip | |
- name: Get pip cache dir | |
id: pip-cache | |
shell: bash | |
run: | | |
echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT | |
- name: pip cache | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.pip-cache.outputs.dir }} | |
# the action does not permit updating an existing cache, so we need | |
# unique keys | |
key: ${{ runner.os }}-${{ matrix.python-version }}-pip-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-${{ matrix.python-version }}-pip- | |
- name: Set up environment & install dependencies | |
run: | | |
python -m pip install pip-tools | |
pip-compile --quiet --generate-hashes --extra mainapp > requirements.txt | |
python -m pip install --requirement requirements.txt | |
python -m pip install .[test] | |
- name: Run tests | |
run: tox | |
- name: Create GitHub Release | |
if: startsWith(github.ref, 'refs/tags/release-') && github.event_name == 'push' | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: | | |
requirements.txt | |
Dockerfile | |
- name: Store tested requirements.txt file as artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: requirements.txt | |
path: | | |
requirements.txt | |
publish-docker-image: | |
runs-on: ubuntu-latest | |
needs: [unit-tests] | |
steps: | |
- name: System Dependencies for Packaging | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y python3-pip python3-venv | |
python3 -m venv /tmp/tomlq | |
/tmp/tomlq/bin/pip install --upgrade pip | |
/tmp/tomlq/bin/pip install yq | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Set Environment | |
run: | | |
echo "APP_VERSION=$(/tmp/tomlq/bin/tomlq -r .project.version pyproject.toml)" >> $GITHUB_ENV | |
echo "APP_DESC=$(/tmp/tomlq/bin/tomlq -r .project.description pyproject.toml)" >> $GITHUB_ENV | |
- name: Retrieve tested requirements file | |
uses: actions/download-artifact@v3 | |
with: | |
name: requirements.txt | |
- name: Build Image | |
run: > | |
docker build | |
--build-arg "APP_VERSION=${APP_VERSION}" | |
--build-arg "APP_DESC=${APP_DESC}" | |
-t "ghcr.io/${GITHUB_REPOSITORY}:${APP_VERSION}" | |
-t "ghcr.io/${GITHUB_REPOSITORY}:latest" | |
. | |
# - name: Login to Docker Hub | |
# if: github.event_name == 'push' | |
# uses: docker/login-action@v2 | |
# with: | |
# username: ${{ secrets.DOCKERHUB_USERNAME }} | |
# password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Login to GHCR | |
if: startsWith(github.ref, 'refs/tags/release-') && github.event_name == 'push' | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Push Docker Image | |
if: startsWith(github.ref, 'refs/tags/release-') && github.event_name == 'push' | |
run: | | |
docker push "ghcr.io/${GITHUB_REPOSITORY}:${APP_VERSION}" | |
pypi-publish: | |
needs: [unit-tests] | |
if: startsWith(github.ref, 'refs/tags/release-') && github.event_name == 'push' | |
name: Upload release to PyPI | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
url: https://pypi.org/p/httpbin | |
permissions: | |
id-token: write | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Build distribution | |
run: | | |
python -m pip install --upgrade pip build | |
pyproject-build | |
- name: Publish package distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 |