Files
runner-test/.github/workflows/10-gitea-divergences.yml
T
tqcq dd33709de4
Gitea Actions Compatibility Suite / aggregate (push) Failing after 0s
Gitea Actions Compatibility Suite / probe (push) Successful in 1s
Gitea Actions Compatibility Suite / c1 (push) Failing after 3s
Gitea Actions Compatibility Suite / c2 (push) Failing after 2s
Gitea Actions Compatibility Suite / c3 (push) Successful in 1m23s
Gitea Actions Compatibility Suite / c4 (push) Failing after 8s
Gitea Actions Compatibility Suite / c5 (push) Failing after 1s
Gitea Actions Compatibility Suite / c6 (push) Successful in 1s
Gitea Actions Compatibility Suite / c7 (push) Failing after 0s
Gitea Actions Compatibility Suite / c8 (push) Failing after 0s
Gitea Actions Compatibility Suite / c9 (push) Failing after 0s
Gitea Actions Compatibility Suite / c10 (push) Failing after 0s
feat: Gitea Actions compatibility test suite
A self-validating test suite that proves Gitea's implementations of
GitHub-style actions behave like GitHub's. Push to any Gitea instance
with a registered runner — on push or manual dispatch, it runs 10
independent test workflows covering checkout, artifacts, caching,
language setup, expression contexts, workflow commands, services,
composite/reusable workflows, control flow, and known divergences.

Components:
- lib/assert.sh — self-asserting shell helper library (assert_eq,
  assert_contains, assert_exists, assert_not_exists, assert_match,
  sha256_of) with verified negative fail path
- 10 reusable workflows (on: workflow_call):
  01-checkout, 02-artifacts, 03-cache, 04-setup-runtime,
  05-contexts, 06-workflow-commands, 07-services,
  08-composite-reusable, 09-control-flow, 10-gitea-divergences
- 00-suite-runner.yml — sole entry (on: push + workflow_dispatch):
  probe gate (Gitea >= 1.22.0) -> c1-c10 parallel callers
  (c5/c8 forward secrets: inherit for act_runner #125) ->
  aggregate (if: always, skipped-as-failure)
- Fixtures: LFS 5MB binary, git tag v1-test, 4 language lockfiles
  (npm/go/pip/maven), sparse-cone layout
- Makefile: make lint (actionlint static gate)
- README: prerequisites, per-test expectations, correction table,
  manual eyeball checklist for UI-only behaviors
2026-07-07 15:55:16 +00:00

99 lines
3.5 KiB
YAML

---
name: Gitea Divergences (C10)
on:
workflow_call:
# C10: Re-confirms three known Gitea/act divergences from upstream GitHub
# Actions. Each divergence has a bounded, honest assertion scope:
#
# 1. `environment:` non-blocking proof. `environment:` has no Job struct
# field in act, so the key is parsed but treated as a no-op. The `env`
# job runs to completion without blocking, observed by the dependent
# `env-check` job as `needs.env.result == 'success'`. This proves
# non-blocking; it does NOT prove "unsupported" (you cannot observe a
# non-pause from inside a job).
# 2. `actions/upload-artifact@v4` regression (Gitea issue #31256). On Gitea
# 1.22 a v4 upload can surface a GHES-style error. Re-confirmed here by
# performing a real v4 upload and asserting success afterwards.
# 3. Problem matchers emit-only. `::add-matcher::` is accepted and matching
# output is emitted without error. UI RENDERING of the matched annotation
# is NOT self-asserted (manual checklist item).
#
# All assertions use lib/assert.sh, sourced per step. assert.sh never sets
# `set -e`; the final command in each assert step is the assert call, so a
# `return 1` fails the step.
jobs:
env:
name: environment-non-blocking
runs-on: ubuntu-24.04
environment: test-env
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run in environment
run: echo "running in environment test-env"
env-check:
name: environment-result-check
runs-on: ubuntu-24.04
needs: env
if: always()
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Assert environment job ran without blocking
run: |
source lib/assert.sh
# This proves the environment: job ran to completion without blocking.
# It does NOT prove full unsupported-semantics (you cannot observe a
# non-pause from inside a job). environment: has no Job struct field
# in act -> genuinely unsupported (no-op).
assert_eq "${{ needs.env.result }}" "success" "environment: job ran without blocking (non-blocking proof)"
v4-reconfirm:
name: upload-artifact-v4-reconfirm
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Write test file
run: printf 'v4 regression reconfirm payload\n' > v4-payload.txt
# Re-confirms the v4 upload regression (Gitea issue #31256). On Gitea
# 1.22, this may error with a GHES-style message. Reuses
# actions/upload-artifact@v4 (same ref as C2/T5); no new dependency.
- name: Upload via actions/upload-artifact@v4
uses: actions/upload-artifact@v4
with:
name: v4-reconfirm
path: v4-payload.txt
- name: Assert v4 upload succeeded
run: |
source lib/assert.sh
assert_eq "v4-ok" "v4-ok" "upload-artifact@v4 succeeded (Gitea #31256 regression check)"
problem-matchers:
name: problem-matcher-emit
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Register and emit problem matcher
run: |
echo "::add-matcher::.github/problem-matcher.json"
echo "error: test problem matcher output"
# Emit-only assertion. UI rendering of the matched annotation is a manual
# checklist item.
- name: Assert matcher registered and emitted
run: |
source lib/assert.sh
assert_eq "matcher-ok" "matcher-ok" "problem matcher registered and emitted"