Skip to content

Nightly ACTS

Nightly ACTS #6

Workflow file for this run

name: Nightly ACTS
# Conformance counterpart of `nightly.yaml`, on the same schedule. Separate
# workflows so neither shows up red for the other's failure and each can be
# re-run on its own.
on:
schedule:
- cron: '0 2 * * *' # 2:00 AM UTC daily
workflow_dispatch: # Allow manual execution
permissions:
contents: write
jobs:
acts:
name: Nightly ACTS Run
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Clone a2a-itk
uses: actions/checkout@v7
with:
repository: a2aproject/a2a-itk
ref: main
path: itk/a2a-itk
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Build itk_service image (GHA layer cache)
uses: docker/build-push-action@v7
with:
context: itk/a2a-itk
tags: itk_service:latest
load: true
cache-from: type=gha,scope=itk_service
cache-to: type=gha,mode=max,scope=itk_service
- name: Cache launcher peer-SDK checkouts + build outputs
uses: actions/cache@v6
with:
path: ~/.cache/a2a-itk-launcher
key: itk-launcher-${{ runner.os }}-${{ github.sha }}
restore-keys: |
itk-launcher-${{ runner.os }}-
- name: Run Nightly ACTS Conformance
run: bash run_itk.sh
working-directory: itk
env:
A2A_ITK_REVISION: main
ITK_ACTS_RUN: "1"
ITK_ACTS_TRANSPORTS: jsonrpc,grpc,rest
# Unlike the PR tier this does NOT gate on conformance: a `must`
# failure is the metric being recorded, not a broken run. The step
# fails only if the service errored or the report came back
# malformed, which is exactly when publishing should be skipped.
ITK_NIGHTLY_RUN: "True"
ITK_SKIP_BUILD: "1"
- name: Upload ACTS reports
if: always()
uses: actions/upload-artifact@v7
with:
name: acts-reports-python-nightly
path: itk/acts-report-*.json
if-no-files-found: warn
# Outlives the rolling asset's 7-run window, so every entry it
# carries still has its full report to link to.
retention-days: 30
- name: Upload ACTS Results to Rolling Release
uses: softprops/action-gh-release@v3
with:
# The conformance counterpart of `itk_python.json`, on the same
# permanent tag: `process_acts_results.py` fetches
# `.../download/nightly-metrics/acts_python.json`, appends one entry
# covering all three bindings, and the upload puts it back.
tag_name: "nightly-metrics"
prerelease: true
files: |
itk/acts_python.json
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}