Skip to content

docs: reconcile accepted A8 build and retirement evidence #950

docs: reconcile accepted A8 build and retirement evidence

docs: reconcile accepted A8 build and retirement evidence #950

Workflow file for this run

# █████
# ░░███
# ██████ ███████ ██████
# ███░░███░░░███░ ░░░░░███
# ░███ ░███ ░███ ███████
# ░███ ░███ ░███ ███ ███░░███
# ░░██████ ░░█████ ░░████████
# ░░░░░░ ░░░░░ ░░░░░░░░
#
# Copyright (C) 2026 — 2026, Ota. All Rights Reserved.
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# Licensed under the Apache License, Version 2.0. See LICENSE for the full license text.
# You may not use this file except in compliance with that License.
# Unless required by applicable law or agreed to in writing, software distributed under the
# License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific language governing permissions
# and limitations under the License.
#
# If you need additional information or have any questions, please email: os@ota.run
name: Smoke
on:
pull_request:
push:
branches:
- '**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'push' && github.ref_name || github.run_id }}
cancel-in-progress: true
permissions:
contents: read
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
jobs:
typed-effect-admission-pressure:
uses: ./.github/workflows/typed-effect-admission-pressure.yml
repo-smoke:
name: Repo Smoke (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
env:
RUSTFLAGS: ${{ matrix.os == 'windows-latest' && '-C link-arg=/STACK:8388608' || '' }}
COLUMNS: "120"
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Cache Rust artifacts
if: runner.os != 'Windows'
uses: Swatinem/rust-cache@v2
- name: Install ota
shell: bash
run: |
set -euo pipefail
export CARGO_HTTP_MULTIPLEXING=false
export CARGO_NET_RETRY=10
if command -v rustup >/dev/null 2>&1; then
CARGO_CMD="$(rustup which cargo)"
RUSTC_CMD="$(rustup which rustc)"
env -u RUSTC_WRAPPER RUSTC="$RUSTC_CMD" "$CARGO_CMD" install --path . --locked
else
env -u RUSTC_WRAPPER cargo install --path . --locked
fi
- name: Ensure cargo is on PATH (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$cargoBin = Join-Path $env:USERPROFILE ".cargo\bin"
if (-not (Test-Path $cargoBin)) {
throw "cargo bin path not found: $cargoBin"
}
Add-Content -Path $env:GITHUB_PATH -Value $cargoBin
- name: Validate repo contract
run: ota validate . --plain
- name: Ensure no deprecated JSON schema resolver API in workflows
shell: bash
run: |
set -euo pipefail
deprecated_import='from jsonschema import .*Ref'"Resolver"
deprecated_ctor='Ref'"Resolver\\("
if rg -n "${deprecated_import}|${deprecated_ctor}" .github/workflows; then
echo "Found deprecated jsonschema.RefResolver usage in workflow files."
exit 1
fi
- name: Smoke repo run preview JSON
shell: bash
run: |
ota json validate \
--schema run-preview.json \
--allow-exit 0 \
--allow-exit 1 \
--write-payload repo-run-preview.json \
--assert-eq dry_run=true \
--assert-eq task=ci \
--assert-eq requested_task.name=ci \
--assert-type plan.actions:array \
--assert-in preview_status='["RUNNABLE","RUNNABLE WITH WARNINGS","BLOCKED"]' \
--assert-non-empty-string summary.verdict \
--assert-exit-map 'preview_status=0:["RUNNABLE","RUNNABLE WITH WARNINGS"];1:["BLOCKED"]' \
-- ota run ci --dry-run --json .
- name: Smoke repo up preview JSON
shell: bash
run: |
ota json validate \
--schema up.json \
--allow-exit 0 \
--allow-exit 1 \
--write-payload repo-up-preview.json \
--assert-eq dry_run=true \
--assert-eq phase=preview \
--assert-in preview_status='["RUNNABLE","RUNNABLE WITH WARNINGS","BLOCKED"]' \
--assert-in status='["READY","READY WITH WARNINGS","BLOCKED"]' \
--assert-type plan.actions:array \
--assert-eq contract_identity.project.name=ota \
-- ota up --dry-run --json .
examples-smoke:
name: Examples Smoke
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Cache Rust artifacts
uses: Swatinem/rust-cache@v2
- name: Install ota
shell: bash
run: |
set -euo pipefail
env -u RUSTC_WRAPPER cargo install --path . --locked
- name: Ensure no deprecated JSON schema resolver API in workflows
shell: bash
run: |
set -euo pipefail
deprecated_import='from jsonschema import .*Ref'"Resolver"
deprecated_ctor='Ref'"Resolver\\("
if rg -n "${deprecated_import}|${deprecated_ctor}" .github/workflows; then
echo "Found deprecated jsonschema.RefResolver usage in workflow files."
exit 1
fi
- name: Validate example contracts
run: |
ota validate examples/basic-rust --plain
ota validate examples/basic-node --plain
ota validate examples/build-container-image --plain
ota workspace validate examples/workspace-basic --plain
- name: Smoke Rust example preview
shell: bash
run: |
ota json validate \
--schema run-preview.json \
--allow-exit 0 \
--allow-exit 1 \
--write-payload basic-rust-run-preview.json \
--assert-eq dry_run=true \
--assert-eq requested_task.name=test \
--assert-in preview_status='["RUNNABLE","RUNNABLE WITH WARNINGS","BLOCKED"]' \
--assert-eq toolchains.0.name=rust \
-- ota run test --dry-run --json examples/basic-rust
- name: Smoke Node example preview
shell: bash
run: |
ota json validate \
--schema run-preview.json \
--allow-exit 0 \
--allow-exit 1 \
--write-payload basic-node-run-preview.json \
--assert-eq dry_run=true \
--assert-eq requested_task.name=test \
--assert-in preview_status='["RUNNABLE","RUNNABLE WITH WARNINGS","BLOCKED"]' \
--assert-eq toolchains.0.name=node \
-- ota run test --dry-run --json examples/basic-node
- name: Smoke container image build example preview
shell: bash
run: |
ota json validate \
--schema run-preview.json \
--allow-exit 0 \
--allow-exit 1 \
--write-payload build-container-image-run-preview.json \
--assert-eq dry_run=true \
--assert-eq requested_task.name=image:build \
--assert-eq requested_task.kind=build_container_image \
--assert-eq requested_task.action.kind=build_container_image \
--assert-eq requested_task.action.from=Dockerfile \
--assert-eq requested_task.action.to=build-container-image-example:local \
--assert-eq requested_task.action.context=. \
--assert-in preview_status='["RUNNABLE","RUNNABLE WITH WARNINGS","BLOCKED"]' \
-- ota run image:build --dry-run --json examples/build-container-image
- name: Smoke workspace tasks JSON
shell: bash
run: |
python - <<'PY'
import json
import pathlib
import subprocess
output = subprocess.run(
["ota", "workspace", "tasks", "--json", "examples/workspace-basic"],
check=True,
capture_output=True,
text=True,
)
body = json.loads(output.stdout)
assert body["ok"] is True
assert len(body["repos"]) == 2
assert body["summary"]["repo_count"] == 2
pathlib.Path("workspace-tasks.json").write_text(output.stdout, encoding="utf-8")
PY