mirror of
https://github.com/Second-Hand-Friends/kleinanzeigen-bot.git
synced 2026-03-12 02:31:45 +01:00
Bumps the all-actions group with 2 updates: [vegardit/fast-apt-mirror.sh](https://github.com/vegardit/fast-apt-mirror.sh) and [github/codeql-action](https://github.com/github/codeql-action). Updates `vegardit/fast-apt-mirror.sh` from 1.4.1 to 1.4.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vegardit/fast-apt-mirror.sh/releases">vegardit/fast-apt-mirror.sh's releases</a>.</em></p> <blockquote> <h2>1.4.2</h2> <h2>What's Changed</h2> <h3>Fixed</h3> <ul> <li>prevent Ubuntu ARM switching to non-ubuntu-ports mirrors</li> <li>prevent invalid fastest mirror selection with ignore-sync-state</li> <li>avoid pipefail/ERR-trap corrupting fastest mirror detection</li> <li>Option --exclude-current not working reliably and support ARM</li> <li>Multiple /etc/*-release files can cause wrong distro detection <a href="https://redirect.github.com/vegardit/fast-apt-mirror.sh/issues/12">#12</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/vegardit/fast-apt-mirror.sh/compare/1.4.1...1.4.2">https://github.com/vegardit/fast-apt-mirror.sh/compare/1.4.1...1.4.2</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="29a5ef3401"><code>29a5ef3</code></a> fix(find): prevent Ubuntu ARM switching to non-ubuntu-ports mirrors</li> <li><a href="f3f6ac867d"><code>f3f6ac8</code></a> fix(find): keep Ubuntu ARM mirror candidates on ubuntu-ports</li> <li><a href="77bc0f4f48"><code>77bc0f4</code></a> fix(find): harden sync baseline and fallback to reachable mirrors</li> <li><a href="e4cfe62e1a"><code>e4cfe62</code></a> fix(find): use InRelease for Ubuntu ARM healthchecks</li> <li><a href="85bc4a4115"><code>85bc4a4</code></a> fix(action): simplify fast-apt-mirror.sh setup</li> <li><a href="61f5fd911b"><code>61f5fd9</code></a> fix(find): avoid pipefail/ERR-trap corrupting fastest mirror detection</li> <li><a href="7ee8df396d"><code>7ee8df3</code></a> fix: dedup mirror URLs</li> <li><a href="3b80eadc89"><code>3b80ead</code></a> fix: refine mirror health checks and exclude 404 mirrors</li> <li><a href="39824222f5"><code>3982422</code></a> fix: prevent invalid fastest mirror selection with ignore-sync-state</li> <li><a href="4c4ae91025"><code>4c4ae91</code></a> ci(deps): bump actions/checkout from 4 to 6</li> <li>Additional commits viewable in <a href="e5288ed7a1...29a5ef3401">compare view</a></li> </ul> </details> <br /> Updates `github/codeql-action` from 4.31.11 to 4.32.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/github/codeql-action/releases">github/codeql-action's releases</a>.</em></p> <blockquote> <h2>v4.32.2</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.1">2.24.1</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3460">#3460</a></li> </ul> <h2>v4.32.1</h2> <ul> <li>A warning is now shown in Default Setup workflow logs if a <a href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">private package registry is configured</a> using a GitHub Personal Access Token (PAT), but no username is configured. <a href="https://redirect.github.com/github/codeql-action/pull/3422">#3422</a></li> <li>Fixed a bug which caused the CodeQL Action to fail when repository properties cannot successfully be retrieved. <a href="https://redirect.github.com/github/codeql-action/pull/3421">#3421</a></li> </ul> <h2>v4.32.0</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.0">2.24.0</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3425">#3425</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action's changelog</a>.</em></p> <blockquote> <h1>CodeQL Action Changelog</h1> <p>See the <a href="https://github.com/github/codeql-action/releases">releases page</a> for the relevant changes to the CodeQL CLI and language packs.</p> <h2>[UNRELEASED]</h2> <p>No user facing changes.</p> <h2>4.32.2 - 05 Feb 2026</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.1">2.24.1</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3460">#3460</a></li> </ul> <h2>4.32.1 - 02 Feb 2026</h2> <ul> <li>A warning is now shown in Default Setup workflow logs if a <a href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">private package registry is configured</a> using a GitHub Personal Access Token (PAT), but no username is configured. <a href="https://redirect.github.com/github/codeql-action/pull/3422">#3422</a></li> <li>Fixed a bug which caused the CodeQL Action to fail when repository properties cannot successfully be retrieved. <a href="https://redirect.github.com/github/codeql-action/pull/3421">#3421</a></li> </ul> <h2>4.32.0 - 26 Jan 2026</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.0">2.24.0</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3425">#3425</a></li> </ul> <h2>4.31.11 - 23 Jan 2026</h2> <ul> <li>When running a Default Setup workflow with <a href="https://docs.github.com/en/actions/how-tos/monitor-workflows/enable-debug-logging">Actions debugging enabled</a>, the CodeQL Action will now use more unique names when uploading logs from the Dependabot authentication proxy as workflow artifacts. This ensures that the artifact names do not clash between multiple jobs in a build matrix. <a href="https://redirect.github.com/github/codeql-action/pull/3409">#3409</a></li> <li>Improved error handling throughout the CodeQL Action. <a href="https://redirect.github.com/github/codeql-action/pull/3415">#3415</a></li> <li>Added experimental support for automatically excluding <a href="https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github">generated files</a> from the analysis. This feature is not currently enabled for any analysis. In the future, it may be enabled by default for some GitHub-managed analyses. <a href="https://redirect.github.com/github/codeql-action/pull/3318">#3318</a></li> <li>The changelog extracts that are included with releases of the CodeQL Action are now shorter to avoid duplicated information from appearing in Dependabot PRs. <a href="https://redirect.github.com/github/codeql-action/pull/3403">#3403</a></li> </ul> <h2>4.31.10 - 12 Jan 2026</h2> <ul> <li>Update default CodeQL bundle version to 2.23.9. <a href="https://redirect.github.com/github/codeql-action/pull/3393">#3393</a></li> </ul> <h2>4.31.9 - 16 Dec 2025</h2> <p>No user facing changes.</p> <h2>4.31.8 - 11 Dec 2025</h2> <ul> <li>Update default CodeQL bundle version to 2.23.8. <a href="https://redirect.github.com/github/codeql-action/pull/3354">#3354</a></li> </ul> <h2>4.31.7 - 05 Dec 2025</h2> <ul> <li>Update default CodeQL bundle version to 2.23.7. <a href="https://redirect.github.com/github/codeql-action/pull/3343">#3343</a></li> </ul> <h2>4.31.6 - 01 Dec 2025</h2> <p>No user facing changes.</p> <h2>4.31.5 - 24 Nov 2025</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="45cbd0c69e"><code>45cbd0c</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3461">#3461</a> from github/update-v4.32.2-7aee93297</li> <li><a href="cb528be87e"><code>cb528be</code></a> Update changelog for v4.32.2</li> <li><a href="7aee932974"><code>7aee932</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3460">#3460</a> from github/update-bundle/codeql-bundle-v2.24.1</li> <li><a href="b5f028a984"><code>b5f028a</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3457">#3457</a> from github/dependabot/npm_and_yarn/npm-minor-4c1fc3...</li> <li><a href="9702c27ab9"><code>9702c27</code></a> Merge branch 'main' into dependabot/npm_and_yarn/npm-minor-4c1fc3d0aa</li> <li><a href="c36c94846f"><code>c36c948</code></a> Add changelog note</li> <li><a href="3d0331896c"><code>3d03318</code></a> Update default bundle to codeql-bundle-v2.24.1</li> <li><a href="77591e2c4a"><code>77591e2</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/3459">#3459</a> from github/copilot/fix-github-actions-workflow-again</li> <li><a href="7a44a9db3f"><code>7a44a9d</code></a> Fix Rebuild Action workflow by adding --no-edit flag to git merge --continue</li> <li><a href="e2ac371513"><code>e2ac371</code></a> Initial plan</li> <li>Additional commits viewable in <a href="19b2f06db2...45cbd0c69e">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
582 lines
19 KiB
YAML
582 lines
19 KiB
YAML
# SPDX-FileCopyrightText: © Sebastian Thomschke and contributors
|
||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||
# SPDX-ArtifactOfProjectHomePage: https://github.com/Second-Hand-Friends/kleinanzeigen-bot
|
||
#
|
||
# https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax
|
||
name: Build
|
||
|
||
on: # https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows
|
||
schedule:
|
||
# https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule
|
||
- cron: '0 15 1 * *'
|
||
push:
|
||
branches: ['**'] # build all branches
|
||
tags-ignore: ['**'] # don't build tags
|
||
paths-ignore:
|
||
- '**/*.md'
|
||
- '.act*'
|
||
- '.editorconfig'
|
||
- '.git*'
|
||
- '.github/*.yml'
|
||
- '.github/ISSUE_TEMPLATE/*'
|
||
- '.github/workflows/codeql-analysis.yml'
|
||
- '.github/workflows/publish-release.yml'
|
||
- '.github/workflows/stale.yml'
|
||
- '.github/workflows/update-python-deps.yml'
|
||
- '.github/workflows/validate-pr.yml'
|
||
- 'codecov.yml'
|
||
pull_request:
|
||
paths-ignore:
|
||
- '**/*.md'
|
||
- '.act*'
|
||
- '.editorconfig'
|
||
- '.git*'
|
||
- '.github/*.yml'
|
||
- '.github/ISSUE_TEMPLATE/*'
|
||
- '.github/workflows/codeql-analysis.yml'
|
||
- '.github/workflows/publish-release.yml'
|
||
- '.github/workflows/stale.yml'
|
||
- '.github/workflows/update-python-deps.yml'
|
||
- '.github/workflows/validate-pr.yml'
|
||
- 'codecov.yml'
|
||
workflow_dispatch:
|
||
# https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#workflow_dispatch
|
||
|
||
|
||
defaults:
|
||
run:
|
||
shell: bash
|
||
|
||
|
||
jobs:
|
||
|
||
###########################################################
|
||
build:
|
||
###########################################################
|
||
|
||
# Skip push runs for non-main/release branches in the main repo; allow forks to run on feature branches.
|
||
if: github.event_name != 'push' || github.ref_name == 'main' || github.ref_name == 'release' || github.repository != 'Second-Hand-Friends/kleinanzeigen-bot'
|
||
permissions:
|
||
packages: write
|
||
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
include:
|
||
- os: macos-15-intel # X86
|
||
PYTHON_VERSION: "3.10"
|
||
PUBLISH_RELEASE: false
|
||
- os: macos-latest # ARM
|
||
PYTHON_VERSION: "3.10"
|
||
PUBLISH_RELEASE: false
|
||
- os: ubuntu-latest
|
||
PYTHON_VERSION: "3.10"
|
||
PUBLISH_RELEASE: false
|
||
- os: windows-latest
|
||
PYTHON_VERSION: "3.10"
|
||
PUBLISH_RELEASE: false
|
||
- os: macos-15-intel # X86
|
||
PYTHON_VERSION: "3.14"
|
||
PUBLISH_RELEASE: true
|
||
- os: macos-latest # ARM
|
||
PYTHON_VERSION: "3.14"
|
||
PUBLISH_RELEASE: true
|
||
- os: ubuntu-latest
|
||
PYTHON_VERSION: "3.14"
|
||
PUBLISH_RELEASE: true
|
||
- os: windows-latest
|
||
PYTHON_VERSION: "3.14"
|
||
PUBLISH_RELEASE: true
|
||
|
||
runs-on: ${{ matrix.os }} # https://github.com/actions/runner-images#available-images
|
||
timeout-minutes: 20
|
||
|
||
steps:
|
||
- name: "Show: GitHub context"
|
||
env:
|
||
GITHUB_CONTEXT: ${{ toJSON(github) }}
|
||
run: printf '%s' "$GITHUB_CONTEXT" | python -m json.tool
|
||
|
||
|
||
- name: "Show: environment variables"
|
||
run: env | sort
|
||
|
||
|
||
- name: Configure Fast APT Mirror
|
||
uses: vegardit/fast-apt-mirror.sh@29a5ef3401107220fc3c32a0c659b6a1211f9e0f # v1.4.2
|
||
|
||
|
||
- name: Git Checkout
|
||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.0
|
||
# https://github.com/actions/checkout
|
||
|
||
|
||
- name: "Install: Chromium Browser"
|
||
if: env.ACT == 'true' && startsWith(matrix.os, 'ubuntu')
|
||
run: |
|
||
if ! hash google-chrome &>/dev/null; then
|
||
curl -sSfL https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -o /tmp/chrome.deb
|
||
sudo dpkg -i /tmp/chrome.deb || true
|
||
sudo apt-get --no-install-recommends -y --fix-broken install
|
||
fi
|
||
|
||
|
||
- name: "Install: Python and PDM" # https://github.com/pdm-project/setup-pdm
|
||
uses: pdm-project/setup-pdm@94a823180e06fcde4ad29308721954a521c96ed0 # v4.4
|
||
with:
|
||
python-version: "${{ matrix.PYTHON_VERSION }}"
|
||
cache: ${{ !startsWith(matrix.os, 'macos') }} # https://github.com/pdm-project/setup-pdm/issues/55
|
||
|
||
|
||
- name: "Install: Python dependencies"
|
||
run: |
|
||
set -eux
|
||
|
||
python --version
|
||
python -m pip install --upgrade pip
|
||
pip install --upgrade pdm
|
||
if [[ ! -e .venv ]]; then
|
||
pdm venv create || true
|
||
fi
|
||
pdm sync --clean -v
|
||
|
||
|
||
- name: Display project metadata
|
||
run: pdm show
|
||
|
||
|
||
- name: Check with pip-audit
|
||
# until https://github.com/astral-sh/ruff/issues/8277
|
||
run:
|
||
pdm run pip-audit --progress-spinner off --skip-editable --verbose
|
||
|
||
|
||
- name: Check with ruff
|
||
run: pdm run ruff check
|
||
|
||
|
||
- name: Check with mypy
|
||
run: pdm run mypy
|
||
|
||
|
||
- name: Check with basedpyright
|
||
run: pdm run basedpyright
|
||
|
||
|
||
- name: Run unit tests
|
||
run: pdm run utest:cov -vv
|
||
|
||
|
||
- name: Run integration tests
|
||
run: |
|
||
set -eux
|
||
|
||
case "${{ matrix.os }}" in
|
||
ubuntu-*)
|
||
sudo apt-get install --no-install-recommends -y xvfb
|
||
# Run tests INSIDE xvfb context
|
||
xvfb-run bash -c 'pdm run itest:cov -vv'
|
||
;;
|
||
*) pdm run itest:cov -vv
|
||
;;
|
||
esac
|
||
|
||
|
||
- name: Run smoke tests
|
||
run: pdm run smoke:cov -vv
|
||
|
||
|
||
- name: Run app from source
|
||
run: |
|
||
echo "
|
||
login:
|
||
username: 'john.doe@example.com'
|
||
password: 'such_a_secret'
|
||
" > config.yaml
|
||
|
||
set -eux
|
||
|
||
pdm run app help
|
||
pdm run app version
|
||
pdm run app verify
|
||
|
||
|
||
- name: "Install: binutils (strip)"
|
||
if: startsWith(matrix.os, 'ubuntu')
|
||
run: sudo apt-get install --no-install-recommends -y binutils
|
||
|
||
|
||
- name: "Install: UPX"
|
||
if: startsWith(matrix.os, 'windows')
|
||
run: |
|
||
set -eu
|
||
|
||
upx_download_url=$(curl -fsSL -H "Authorization: token ${{ github.token }}" https://api.github.com/repos/upx/upx/releases/latest | grep browser_download_url | grep win64.zip | cut "-d\"" -f4)
|
||
echo "Downloading [$upx_download_url]..."
|
||
curl -fL -o /tmp/upx.zip $upx_download_url
|
||
|
||
echo "Extracting upx zip..."
|
||
mkdir /tmp/upx
|
||
7z e /tmp/upx.zip -o/tmp/upx *.exe -r
|
||
echo "$(cygpath -wa /tmp/upx)" >> $GITHUB_PATH
|
||
|
||
/tmp/upx/upx.exe --version
|
||
|
||
|
||
- name: Build self-contained executable
|
||
run: |
|
||
set -eux
|
||
|
||
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
||
NO_UPX=1 pdm run compile
|
||
mv dist/kleinanzeigen-bot.exe dist/kleinanzeigen-bot-uncompressed.exe
|
||
fi
|
||
|
||
pdm run compile
|
||
|
||
ls -l dist
|
||
|
||
|
||
- name: Run self-contained executable
|
||
run: |
|
||
set -eux
|
||
|
||
dist/kleinanzeigen-bot help
|
||
dist/kleinanzeigen-bot version
|
||
dist/kleinanzeigen-bot verify
|
||
|
||
|
||
- name: Upload self-contained executable
|
||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||
if: ((github.ref_name == 'main' || github.ref_name == 'release') && matrix.PUBLISH_RELEASE || github.event_name == 'workflow_dispatch') && !env.ACT
|
||
with:
|
||
name: artifacts-${{ matrix.os }}
|
||
path: dist/kleinanzeigen-bot*
|
||
|
||
|
||
- name: Build Docker image
|
||
if: startsWith(matrix.os, 'ubuntu')
|
||
run: |
|
||
set -eux
|
||
|
||
bash docker/build-image.sh
|
||
|
||
docker run --rm second-hand-friends/kleinanzeigen-bot help
|
||
|
||
|
||
- name: Publish Docker image
|
||
if: github.repository_owner == 'Second-Hand-Friends' && github.ref_name == 'main' && matrix.PUBLISH_RELEASE && startsWith(matrix.os, 'ubuntu') && !env.ACT
|
||
run: |
|
||
set -eux
|
||
|
||
echo "${{ github.token }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
|
||
|
||
image_name="second-hand-friends/kleinanzeigen-bot"
|
||
docker image tag $image_name ghcr.io/$image_name
|
||
docker push ghcr.io/$image_name
|
||
|
||
|
||
- name: Collect coverage reports
|
||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||
if: (github.ref_name == 'main' || github.event_name == 'pull_request') && !env.ACT
|
||
with:
|
||
name: coverage-${{ matrix.os }}-py${{ matrix.PYTHON_VERSION }}
|
||
include-hidden-files: true
|
||
path: .temp/coverage-*.xml
|
||
if-no-files-found: error
|
||
|
||
|
||
###########################################################
|
||
publish-coverage:
|
||
###########################################################
|
||
needs: [build]
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 5
|
||
if: (github.ref_name == 'main' || github.event_name == 'pull_request') && !github.event.act
|
||
|
||
permissions:
|
||
contents: read
|
||
|
||
steps:
|
||
- name: Git Checkout # required to avoid https://docs.codecov.com/docs/error-reference#unusable-reports
|
||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.0
|
||
# https://github.com/actions/checkout
|
||
|
||
|
||
- name: Download coverage reports
|
||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||
with:
|
||
pattern: coverage-*
|
||
path: coverage
|
||
|
||
|
||
- name: List coverage reports
|
||
run: find . -name coverage-*.xml
|
||
|
||
|
||
- name: Publish unit-test coverage
|
||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.0.0
|
||
# https://github.com/codecov/codecov-action
|
||
with:
|
||
slug: ${{ github.repository }}
|
||
name: unit-coverage
|
||
flags: unit-tests
|
||
disable_search: true
|
||
files: coverage/**/coverage-unit.xml
|
||
env:
|
||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||
|
||
|
||
- name: Publish integration-test coverage
|
||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.0.0
|
||
# https://github.com/codecov/codecov-action
|
||
with:
|
||
slug: ${{ github.repository }}
|
||
name: integration-coverage
|
||
flags: integration-tests
|
||
disable_search: true
|
||
files: coverage/**/coverage-integration.xml
|
||
env:
|
||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||
|
||
|
||
- name: Publish smoke-test coverage
|
||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.0.0
|
||
# https://github.com/codecov/codecov-action
|
||
with:
|
||
slug: ${{ github.repository }}
|
||
name: smoke-coverage
|
||
flags: smoke-tests
|
||
disable_search: true
|
||
files: coverage/**/coverage-smoke.xml
|
||
env:
|
||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||
|
||
|
||
###########################################################
|
||
publish-release:
|
||
###########################################################
|
||
needs: [build, publish-coverage]
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 5
|
||
|
||
permissions:
|
||
contents: write # to delete/create GitHub releases
|
||
packages: write # to delete untagged docker images
|
||
|
||
# run on 'main' and 'release' branch when:
|
||
# – build succeeded, AND
|
||
# – publish-coverage succeeded OR was skipped
|
||
if: >
|
||
always()
|
||
&& needs.build.result == 'success'
|
||
&& (needs.publish-coverage.result == 'success' || needs.publish-coverage.result == 'skipped')
|
||
&& (github.ref_name == 'main' || github.ref_name == 'release')
|
||
&& !github.event.act
|
||
|
||
concurrency: publish-${{ github.ref_name }}-release # https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idconcurrency
|
||
|
||
steps:
|
||
- name: "Show: GitHub context"
|
||
env:
|
||
GITHUB_CONTEXT: ${{ toJSON(github) }}
|
||
run: echo $GITHUB_CONTEXT
|
||
|
||
|
||
- name: "Show: environment variables"
|
||
run: env | sort
|
||
|
||
|
||
- name: Configure Fast APT Mirror
|
||
uses: vegardit/fast-apt-mirror.sh@29a5ef3401107220fc3c32a0c659b6a1211f9e0f # v1.4.2
|
||
|
||
|
||
- name: Git Checkout
|
||
# only required by "gh release create" to prevent "fatal: Not a git repository"
|
||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.0
|
||
# https://github.com/actions/checkout
|
||
with:
|
||
fetch-depth: 0
|
||
|
||
|
||
- name: Delete untagged docker image
|
||
continue-on-error: true
|
||
uses: actions/delete-package-versions@e5bc658cc4c965c472efe991f8beea3981499c55 # v5.0.0
|
||
with:
|
||
token: ${{ github.token }}
|
||
delete-only-untagged-versions: true
|
||
package-name: kleinanzeigen-bot
|
||
package-type: container
|
||
|
||
|
||
- name: Download build artifacts
|
||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||
|
||
|
||
- name: Rename build artifacts
|
||
run: |
|
||
mv artifacts-macos-15-intel/kleinanzeigen-bot kleinanzeigen-bot-darwin-amd64
|
||
mv artifacts-macos-latest/kleinanzeigen-bot kleinanzeigen-bot-darwin-arm64
|
||
mv artifacts-ubuntu-latest/kleinanzeigen-bot kleinanzeigen-bot-linux-amd64
|
||
mv artifacts-windows-latest/kleinanzeigen-bot-uncompressed.exe kleinanzeigen-bot-windows-amd64-uncompressed.exe
|
||
mv artifacts-windows-latest/kleinanzeigen-bot.exe kleinanzeigen-bot-windows-amd64.exe
|
||
|
||
|
||
- name: Install ClamAV
|
||
run: |
|
||
sudo apt-get update
|
||
sudo apt-get install -y clamav
|
||
sudo systemctl stop clamav-freshclam.service
|
||
sudo freshclam
|
||
|
||
|
||
- name: Scan build artifacts
|
||
run: clamscan kleinanzeigen-*
|
||
|
||
|
||
- name: "Determine release name"
|
||
id: release
|
||
if: github.event_name != 'schedule'
|
||
run: |
|
||
case "$GITHUB_REF_NAME" in
|
||
main)
|
||
echo "name=preview" >>"$GITHUB_OUTPUT"
|
||
;;
|
||
release)
|
||
echo "name=latest" >>"$GITHUB_OUTPUT"
|
||
;;
|
||
esac
|
||
|
||
|
||
- name: "Generate release notes"
|
||
if: steps.release.outputs.name && steps.release.outputs.name != ''
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
RELEASE_NAME: ${{ steps.release.outputs.name }}
|
||
LEGAL_NOTICE: |
|
||
---
|
||
#### ⚠️ Rechtlicher Hinweis
|
||
<p>Die Verwendung dieses Programms kann unter Umständen gegen die zum jeweiligen Zeitpunkt bei kleinanzeigen.de geltenden Nutzungsbedingungen verstoßen.
|
||
Es liegt in Ihrer Verantwortung, die rechtliche Zulässigkeit der Nutzung dieses Programms zu prüfen.
|
||
Die Entwickler übernehmen keinerlei Haftung für mögliche Schäden oder rechtliche Konsequenzen.
|
||
Die Nutzung erfolgt auf eigenes Risiko. Jede rechtswidrige Verwendung ist untersagt.</p>
|
||
|
||
#### ⚠️ Legal notice
|
||
<p>The use of this program could violate the terms of service of kleinanzeigen.de valid at the time of use.
|
||
It is your responsibility to ensure the legal compliance of its use.
|
||
The developers assume no liability for any damages or legal consequences.
|
||
Use is at your own risk. Any unlawful use is strictly prohibited.</p>
|
||
|
||
run: |
|
||
set -euo pipefail
|
||
|
||
# We reuse the moving "latest"/"preview" tags for releases. GitHub's generate-notes compares
|
||
# tag_name -> previous_tag_name. If we pass the moving tag as tag_name before it moves, the
|
||
# comparison is old -> old (empty notes). We avoid this by using a fake tag_name (not created)
|
||
# and anchoring previous_tag_name to the current moving tag. This yields old -> new notes
|
||
# without creating or pushing any tags (important: pushes can be blocked for workflow files).
|
||
if ! gh release view "$RELEASE_NAME" --json tagName --jq '.tagName' >/dev/null 2>&1; then
|
||
echo "ERROR: Failed to query existing '$RELEASE_NAME' release; cannot generate release notes." >&2
|
||
exit 1
|
||
fi
|
||
|
||
NOTES_TAG="${RELEASE_NAME}-notes-${GITHUB_RUN_ID}"
|
||
echo "Generating notes: tag_name=${NOTES_TAG}, previous_tag_name=${RELEASE_NAME}, target_commitish=${GITHUB_SHA}"
|
||
|
||
# Prefer GitHub's generate-notes API so we get PR links and @mentions
|
||
gh api -X POST "repos/${GITHUB_REPOSITORY}/releases/generate-notes" \
|
||
-f tag_name="$NOTES_TAG" \
|
||
-f target_commitish="$GITHUB_SHA" \
|
||
-f previous_tag_name="$RELEASE_NAME" \
|
||
--jq '.body' > release-notes.md
|
||
|
||
if ! grep -q '[^[:space:]]' release-notes.md; then
|
||
echo "ERROR: GitHub generate-notes returned an empty body." >&2
|
||
exit 1
|
||
fi
|
||
|
||
# Remove the "Full Changelog" line to avoid broken links from the fake tag_name.
|
||
sed -E -i.bak '/^\*\*Full Changelog\*\*:/d' release-notes.md
|
||
rm -f release-notes.md.bak
|
||
|
||
printf "\n%s\n" "$LEGAL_NOTICE" >> release-notes.md
|
||
|
||
|
||
- name: "Delete previous '${{ steps.release.outputs.name }}' release"
|
||
if: steps.release.outputs.name && steps.release.outputs.name != ''
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
RELEASE_NAME: ${{ steps.release.outputs.name }}
|
||
# https://cli.github.com/manual/gh_release_delete
|
||
run: |
|
||
GH_DEBUG=1 gh release delete "$RELEASE_NAME" --yes --cleanup-tag || true
|
||
|
||
|
||
- name: "Create '${{ steps.release.outputs.name }}' Release"
|
||
if: steps.release.outputs.name && steps.release.outputs.name != ''
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
RELEASE_NAME: ${{ steps.release.outputs.name }}
|
||
|
||
# https://cli.github.com/manual/gh_release_create
|
||
run: |
|
||
GH_DEBUG=1 gh release create "$RELEASE_NAME" \
|
||
--title "$RELEASE_NAME" \
|
||
${{ steps.release.outputs.name == 'latest' && '--latest' || '' }} \
|
||
${{ steps.release.outputs.name == 'preview' && '--prerelease' || '' }} \
|
||
--notes-file release-notes.md \
|
||
--target "${{ github.sha }}" \
|
||
kleinanzeigen-bot-darwin-amd64 \
|
||
kleinanzeigen-bot-darwin-arm64 \
|
||
kleinanzeigen-bot-linux-amd64 \
|
||
kleinanzeigen-bot-windows-amd64.exe \
|
||
kleinanzeigen-bot-windows-amd64-uncompressed.exe
|
||
|
||
|
||
- name: "Delete intermediate build artifacts"
|
||
uses: geekyeggo/delete-artifact@f275313e70c08f6120db482d7a6b98377786765b # v5.0.0
|
||
# https://github.com/GeekyEggo/delete-artifact/
|
||
with:
|
||
name: "*"
|
||
failOnError: false
|
||
|
||
|
||
###########################################################
|
||
dependabot-pr-auto-merge:
|
||
###########################################################
|
||
needs: build
|
||
if: github.event_name == 'pull_request' && github.actor == 'dependabot[bot]'
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 5
|
||
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
|
||
steps:
|
||
- name: Merge Dependabot PR
|
||
env:
|
||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||
PR_URL: ${{github.event.pull_request.html_url}}
|
||
run: gh pr merge --auto --rebase "$PR_URL"
|
||
|
||
|
||
###########################################################
|
||
pdm-pr-auto-merge:
|
||
###########################################################
|
||
needs: build
|
||
if: github.event_name == 'pull_request' && github.actor == 'kleinanzeigen-bot-tu[bot]' && github.head_ref == 'dependencies/pdm'
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 5
|
||
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
|
||
steps:
|
||
- name: Merge Dependabot PR
|
||
env:
|
||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||
PR_URL: ${{github.event.pull_request.html_url}}
|
||
run: gh pr merge --auto --rebase "$PR_URL"
|