From ca8bf0b4444dfd03285743c9f2617341b53339ce Mon Sep 17 00:00:00 2001 From: benoit74 Date: Thu, 29 Feb 2024 23:05:29 +0100 Subject: [PATCH] Upgrade CI --- .github/workflows/Publish.yaml | 42 +++++++++++++ .github/workflows/PublishDockerDevImage.yaml | 27 +++++++++ .github/workflows/QA.yaml | 34 +++++++++++ .github/workflows/Tests.yaml | 62 ++++++++++++++++++++ .github/workflows/qa.yml | 38 ------------ .github/workflows/release.yml | 38 ------------ 6 files changed, 165 insertions(+), 76 deletions(-) create mode 100644 .github/workflows/Publish.yaml create mode 100644 .github/workflows/PublishDockerDevImage.yaml create mode 100644 .github/workflows/QA.yaml create mode 100644 .github/workflows/Tests.yaml delete mode 100644 .github/workflows/qa.yml delete mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/Publish.yaml b/.github/workflows/Publish.yaml new file mode 100644 index 0000000..a347c51 --- /dev/null +++ b/.github/workflows/Publish.yaml @@ -0,0 +1,42 @@ +name: Publish released version + +on: + release: + types: [published] + +jobs: + publish: + runs-on: ubuntu-22.04 + permissions: + id-token: write # mandatory for PyPI trusted publishing + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version-file: pyproject.toml + architecture: x64 + + - name: Build packages + run: | + pip install -U pip build + python -m build --sdist --wheel + + - name: Upload to PyPI + uses: pypa/gh-action-pypi-publish@release/v1.8 + + - name: Build and push Docker image + uses: openzim/docker-publish-action@v10 + with: + image-name: openzim/ifixit + tag-pattern: /^v([0-9.]+)$/ + latest-on-tag: true + restrict-to: openzim/ifixit + registries: ghcr.io + credentials: + GHCRIO_USERNAME=${{ secrets.GHCR_USERNAME }} + GHCRIO_TOKEN=${{ secrets.GHCR_TOKEN }} + repo_description: auto + repo_overview: auto diff --git a/.github/workflows/PublishDockerDevImage.yaml b/.github/workflows/PublishDockerDevImage.yaml new file mode 100644 index 0000000..7292a6a --- /dev/null +++ b/.github/workflows/PublishDockerDevImage.yaml @@ -0,0 +1,27 @@ +name: Publish Docker dev image + +on: + push: + branches: + - main + +jobs: + publish: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v3 + + - name: Build and push Docker image + uses: openzim/docker-publish-action@v10 + with: + image-name: openzim/ifixit + manual-tag: dev + latest-on-tag: false + restrict-to: openzim/ifixit + registries: ghcr.io + credentials: + GHCRIO_USERNAME=${{ secrets.GHCR_USERNAME }} + GHCRIO_TOKEN=${{ secrets.GHCR_TOKEN }} + repo_description: auto + repo_overview: auto diff --git a/.github/workflows/QA.yaml b/.github/workflows/QA.yaml new file mode 100644 index 0000000..48ccee5 --- /dev/null +++ b/.github/workflows/QA.yaml @@ -0,0 +1,34 @@ +name: QA + +on: + pull_request: + push: + branches: + - main + +jobs: + check-qa: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version-file: pyproject.toml + architecture: x64 + + - name: Install dependencies (and project) + run: | + pip install -U pip + pip install -e .[lint,scripts,test,check] + + - name: Check black formatting + run: inv lint-black + + - name: Check ruff + run: inv lint-ruff + + - name: Check pyright + run: inv check-pyright diff --git a/.github/workflows/Tests.yaml b/.github/workflows/Tests.yaml new file mode 100644 index 0000000..838269f --- /dev/null +++ b/.github/workflows/Tests.yaml @@ -0,0 +1,62 @@ +name: Tests + +on: + pull_request: + push: + branches: + - main + +jobs: + run-tests: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version-file: pyproject.toml + architecture: x64 + + - name: Install dependencies (and project) + run: | + pip install -U pip + pip install -e .[test,scripts] + + - name: Run the tests + run: inv coverage --args "-vvv" + + - name: Upload coverage report to codecov + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + + build_python: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version-file: pyproject.toml + architecture: x64 + + - name: Ensure we can build Python targets + run: | + pip install -U pip build + python3 -m build --sdist --wheel + + build_docker: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + + - name: Ensure we can build the Docker image + run: | + docker build -t testimage . + + - name: Ensure we can start the Docker image + run: | + docker run --rm testimage diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml deleted file mode 100644 index 35aa095..0000000 --- a/.github/workflows/qa.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: QA - -on: [push, pull_request] - -env: - # black default - MAX_LINE_LENGTH: 88 - -jobs: - check-qa: - runs-on: ubuntu-22.04 - steps: - - name: Retrieve source code - uses: actions/checkout@v3 - - - name: Set up Python ${{ matrix.python }} - uses: actions/setup-python@v1 - with: - python-version: 3.8 - architecture: x64 - - - name: Check black formatting - run: | - pip install black==22.3.0 - black --version - black --check . - - - name: Check flake8 linting - run: | - pip install flake8==3.9.2 - flake8 --version - flake8 . --count --max-line-length=$MAX_LINE_LENGTH --statistics - - - name: Check import order with isort - run: | - pip install isort==5.9.3 - isort --version - isort --profile black --check . diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index d09640e..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: release -on: - release: - types: [published] - tags: - - v* - -env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} - -jobs: - release: - environment: release - runs-on: ubuntu-22.04 - - steps: - - name: Retrieve source code - uses: actions/checkout@v3 - - - name: Set up Python 3.8 - uses: actions/setup-python@v4 - with: - python-version: 3.8 - architecture: x64 - - - name: Build sdist and wheel - run: | - pip install --upgrade setuptools pip wheel - python3 setup.py sdist - python3 setup.py bdist_wheel - - - name: Push release to PyPI - if: github.event_name == 'release' - run: | - pip install --upgrade twine - twine check dist/* - twine upload dist/*