mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-09-24 22:05:20 +01:00
Bumps the gh-actions group with 2 updates: [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance) and [dorny/paths-filter](https://github.com/dorny/paths-filter). Updates `actions/attest-build-provenance` from 4.1.1 to 4.2.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/attest-build-provenance/releases">actions/attest-build-provenance's releases</a>.</em></p> <blockquote> <h2>v4.2.2</h2> <blockquote> <p>[!NOTE] As of version 4, <code>actions/attest-build-provenance</code> is simply a wrapper on top of <a href="https://github.com/actions/attest"><code>actions/attest</code></a>.</p> <p>Existing applications may continue to use the <code>attest-build-provenance</code> action, but new implementations should use <code>actions/attest</code> instead.</p> </blockquote> <h2>What's Changed</h2> <ul> <li>Bump actions/attest from 4.2.0 to 4.2.1 in the actions-minor group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/actions/attest-build-provenance/pull/862">actions/attest-build-provenance#862</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/attest-build-provenance/compare/v4.1.1...v4.2.2">https://github.com/actions/attest-build-provenance/compare/v4.1.1...v4.2.2</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/actions/attest-build-provenance/commit/4d101475d8b20a2381f78447822ac1eab6504dd8"><code>4d10147</code></a> Bump actions/attest from 4.2.0 to 4.2.1 in the actions-minor group (<a href="https://redirect.github.com/actions/attest-build-provenance/issues/862">#862</a>)</li> <li><a href="https://github.com/actions/attest-build-provenance/commit/e3fe62ef559997059fe8380e7d2b4c909e2d65f4"><code>e3fe62e</code></a> Bump the actions-minor group with 2 updates (<a href="https://redirect.github.com/actions/attest-build-provenance/issues/860">#860</a>)</li> <li>See full diff in <a href="https://github.com/actions/attest-build-provenance/compare/0f67c3f4856b2e3261c31976d6725780e5e4c373...4d101475d8b20a2381f78447822ac1eab6504dd8">compare view</a></li> </ul> </details> <br /> Updates `dorny/paths-filter` from 4.0.2 to 4.0.3 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dorny/paths-filter/releases">dorny/paths-filter's releases</a>.</em></p> <blockquote> <h2>v4.0.3</h2> <h2>What's Changed</h2> <ul> <li>Update Outputs in readme to account for the 'every' predicate-quantifier by <a href="https://github.com/hintron"><code>@hintron</code></a> in <a href="https://redirect.github.com/dorny/paths-filter/pull/247">dorny/paths-filter#247</a></li> <li>fix: scope base-ignored warning to API path by <a href="https://github.com/saschabratton"><code>@saschabratton</code></a> in <a href="https://redirect.github.com/dorny/paths-filter/pull/319">dorny/paths-filter#319</a></li> <li>docs: add contents permission to PR example by <a href="https://github.com/134130"><code>@134130</code></a> in <a href="https://redirect.github.com/dorny/paths-filter/pull/248">dorny/paths-filter#248</a></li> <li>feat: add 'some-with-excludes' predicate quantifier by <a href="https://github.com/arxeiss"><code>@arxeiss</code></a> in <a href="https://redirect.github.com/dorny/paths-filter/pull/322">dorny/paths-filter#322</a></li> <li>Document safe handling of file list outputs in workflows by <a href="https://github.com/dorny"><code>@dorny</code></a> in <a href="https://redirect.github.com/dorny/paths-filter/pull/326">dorny/paths-filter#326</a></li> </ul> <h2>Security</h2> <ul> <li>Escape multi-line filenames in list-files shell and csv output] by <a href="https://github.com/ken-matsui"><code>@ken-matsui</code></a> and <a href="https://github.com/tjswlsgg"><code>@tjswlsgg</code></a> in <a href="https://github.com/advisories/GHSA-7hc6-8hq5-9q2m">https://github.com/advisories/GHSA-7hc6-8hq5-9q2m</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/hintron"><code>@hintron</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/paths-filter/pull/247">dorny/paths-filter#247</a></li> <li><a href="https://github.com/134130"><code>@134130</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/paths-filter/pull/248">dorny/paths-filter#248</a></li> <li><a href="https://github.com/arxeiss"><code>@arxeiss</code></a> made their first contribution in <a href="https://redirect.github.com/dorny/paths-filter/pull/322">dorny/paths-filter#322</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/dorny/paths-filter/compare/v4...v4.0.3">https://github.com/dorny/paths-filter/compare/v4...v4.0.3</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md">dorny/paths-filter's changelog</a>.</em></p> <blockquote> <h2>v4.0.3</h2> <ul> <li><a href="https://redirect.github.com/dorny/paths-filter/pull/326">Document safe handling of file list outputs in workflows</a></li> <li><a href="https://github.com/advisories/GHSA-7hc6-8hq5-9q2m">Escape multi-line filenames in list-files shell and csv output</a></li> <li><a href="https://redirect.github.com/dorny/paths-filter/pull/322">Add 'some-with-excludes' predicate quantifier</a></li> <li><a href="https://redirect.github.com/dorny/paths-filter/pull/248">Add contents permission to PR example</a></li> <li><a href="https://redirect.github.com/dorny/paths-filter/pull/319">Scope base-ignored warning to API path</a></li> <li><a href="https://redirect.github.com/dorny/paths-filter/pull/247">Update outputs in readme to account for the 'every' predicate-quantifier</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/dorny/paths-filter/commit/ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d"><code>ceb8a2b</code></a> Update CHANGELOG.md for v4.0.3 and v3.0.4 (<a href="https://redirect.github.com/dorny/paths-filter/issues/327">#327</a>)</li> <li><a href="https://github.com/dorny/paths-filter/commit/ef09b88f3eacdbec6ce135a7c9a193a6849545c1"><code>ef09b88</code></a> Document safe handling of file list outputs in workflows (<a href="https://redirect.github.com/dorny/paths-filter/issues/326">#326</a>)</li> <li><a href="https://github.com/dorny/paths-filter/commit/44adc5b06dc135dba334efce9bf3cf0624512d2d"><code>44adc5b</code></a> Merge commit from fork</li> <li><a href="https://github.com/dorny/paths-filter/commit/4711b7a31b4aa89103d8c6ffab2e3b8e7b6381c7"><code>4711b7a</code></a> feat: add 'some-with-excludes' predicate quantifier (<a href="https://redirect.github.com/dorny/paths-filter/issues/322">#322</a>)</li> <li><a href="https://github.com/dorny/paths-filter/commit/93c889f9e58fca66f35a0c83d8673ac7e88bb70a"><code>93c889f</code></a> fix: escape multi-line filenames in list-files shell and csv output</li> <li><a href="https://github.com/dorny/paths-filter/commit/b41dfa943b1939b9b646f67753bfe35cf6e4de03"><code>b41dfa9</code></a> docs: add contents permission to PR example (<a href="https://redirect.github.com/dorny/paths-filter/issues/248">#248</a>)</li> <li><a href="https://github.com/dorny/paths-filter/commit/9af6e5a9d010d1ae8ec570390b3d793e2b70a402"><code>9af6e5a</code></a> fix: scope base-ignored warning to API path (<a href="https://redirect.github.com/dorny/paths-filter/issues/319">#319</a>)</li> <li><a href="https://github.com/dorny/paths-filter/commit/cae9006b65a1a53044b518c68e13e835c54948a7"><code>cae9006</code></a> docs: update outputs in readme to account for the 'every' predicate-quantifie...</li> <li>See full diff in <a href="https://github.com/dorny/paths-filter/compare/v4.0.2...v4.0.3">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>
136 lines
5.1 KiB
YAML
136 lines
5.1 KiB
YAML
name: E2E Platform
|
|
|
|
# Hermetic end-to-end matrix: boots the app under test against mock
|
|
# Anna's Archive / Cloudflare / bypasser / DNS / proxy / Tor / real torrent
|
|
# clients and runs the cluster suite under each config profile.
|
|
#
|
|
# On a PR that touches relevant code, this runs a fast core subset *and* the heavy
|
|
# `full` profile (real Chrome solving Cloudflare + DoH + real qBittorrent). The
|
|
# `e2e-required` job aggregates them into ONE status check — make that check a
|
|
# required status check in branch protection to block merges on any e2e failure
|
|
# (see tests/e2e/platform/README.md "Gating PRs").
|
|
|
|
on:
|
|
pull_request:
|
|
schedule:
|
|
- cron: "0 4 * * *" # nightly full matrix
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: e2e-platform-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# Detect whether anything that affects the e2e platform changed. This lets the
|
|
# required check always report (never stuck "pending") while only spending CI on
|
|
# PRs that can actually break the e2e stack.
|
|
changes:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
relevant: ${{ steps.filter.outputs.relevant }}
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- uses: dorny/paths-filter@v4.0.3
|
|
id: filter
|
|
with:
|
|
filters: |
|
|
relevant:
|
|
- 'shelfmark/**'
|
|
- 'entrypoint.sh'
|
|
- 'tor.sh'
|
|
- 'Dockerfile'
|
|
- 'tests/e2e/platform/**'
|
|
- '.github/workflows/e2e-platform.yml'
|
|
|
|
select-profiles:
|
|
needs: changes
|
|
if: needs.changes.outputs.relevant == 'true' || github.event_name != 'pull_request'
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
profiles: ${{ steps.pick.outputs.profiles }}
|
|
steps:
|
|
- id: pick
|
|
run: |
|
|
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
|
echo 'profiles=["baseline","bypasser-external","dns-blocked"]' >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo 'profiles=["baseline","bypasser-external","bypasser-disabled","dns-manual","dns-blocked","dns-doh","proxy-http","proxy-socks","tor","client-transmission","client-deluge","client-qbittorrent-delayed"]' >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
e2e:
|
|
needs: select-profiles
|
|
runs-on: ubuntu-latest
|
|
# A wedged app under test must not burn GitHub's 6h max job limit. A healthy
|
|
# profile run finishes in ~3-5 min; anything past 25 is hung, not slow.
|
|
timeout-minutes: 25
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
profile: ${{ fromJSON(needs.select-profiles.outputs.profiles) }}
|
|
name: e2e (${{ matrix.profile }})
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v7
|
|
- name: Install uv and Python
|
|
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
with:
|
|
python-version: "3.14"
|
|
enable-cache: true
|
|
- name: Sync dependencies
|
|
run: make install-python-dev
|
|
- name: Run e2e platform (${{ matrix.profile }})
|
|
run: tests/e2e/platform/run-e2e.sh env/${{ matrix.profile }}.env
|
|
- name: Dump shelfmark logs on failure
|
|
if: failure()
|
|
run: cat tests/e2e/platform/.state/shelfmark.${{ matrix.profile }}.log || true
|
|
|
|
# Heavy "everything real" job: real Chrome internal bypasser solving Cloudflare +
|
|
# DoH + real qBittorrent webseed download. Runs on relevant PRs and nightly.
|
|
e2e-full:
|
|
needs: changes
|
|
if: needs.changes.outputs.relevant == 'true' || github.event_name != 'pull_request'
|
|
runs-on: ubuntu-latest
|
|
# Real Chrome + qBittorrent is the slowest profile; still nowhere near 40 min.
|
|
timeout-minutes: 40
|
|
name: e2e (full — real Chrome + qBittorrent)
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v7
|
|
- name: Install uv and Python
|
|
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
with:
|
|
python-version: "3.14"
|
|
enable-cache: true
|
|
- name: Sync dependencies
|
|
run: make install-python-dev
|
|
- name: Run full pipeline
|
|
run: tests/e2e/platform/run-e2e.sh env/full.env
|
|
- name: Dump logs on failure
|
|
if: failure()
|
|
run: |
|
|
cat tests/e2e/platform/.state/shelfmark.full.log || true
|
|
docker logs e2e-qbittorrent || true
|
|
|
|
# Single aggregated gate. ALWAYS runs (so a required check never hangs "pending"
|
|
# on unrelated PRs) and FAILS if any e2e job failed/was cancelled. Make THIS the
|
|
# required status check in branch protection.
|
|
e2e-required:
|
|
name: e2e required
|
|
needs: [e2e, e2e-full]
|
|
if: always()
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Aggregate e2e results
|
|
run: |
|
|
matrix='${{ needs.e2e.result }}'
|
|
full='${{ needs.e2e-full.result }}'
|
|
echo "e2e matrix=$matrix, e2e-full=$full"
|
|
# success or skipped (unrelated PR) is OK; failure/cancelled blocks.
|
|
for r in "$matrix" "$full"; do
|
|
if [ "$r" = "failure" ] || [ "$r" = "cancelled" ]; then
|
|
echo "::error::An e2e platform job did not pass — blocking."
|
|
exit 1
|
|
fi
|
|
done
|
|
echo "All e2e platform jobs passed (or were skipped as not relevant)."
|