Skip to content

ci: add manual-dispatch e2e acceptance workflow - #10

Merged
richardcase merged 2 commits into
mainfrom
ci/manual-e2e-workflow
Jul 17, 2026
Merged

richardcase merged 2 commits into
mainfrom
ci/manual-e2e-workflow

Conversation

@richardcase

Copy link
Copy Markdown
Member

What

Adds a manually triggered GitHub Actions workflow that runs the full DigitalOcean e2e acceptance suite (make test) on demand, plus Dependabot to keep the pinned actions current. The repo previously had no CI.

Files

  • .github/workflows/e2e.ymlworkflow_dispatch-only (the suite provisions real DO infra and costs money, so no push/PR trigger).
  • .github/dependabot.yml — weekly github-actions updates.

Design

  • Inputs: brigade/flintlock refs, DO region, droplet size, microVM kernel/rootfs images, optional RUN_ID — all defaulted, mapped to the env vars config.py reads.
  • Secrets: DO_API_TOKEN only. A fresh unencrypted ed25519 keypair is generated per run and uploaded to DO at provision time — no static key secret to rotate or leak.
  • Concurrency: group: e2e-acceptance, cancel-in-progress: false — runs queue and are never cancelled mid-flight (cancelling skips the suite's teardown and leaks infra).
  • Reaper safety-net: make clean-tags runs on cancelled() || failure() to close the leak-on-kill gap (job timeout / manual Cancel SIGKILLs before teardown). Safe because serialization means no concurrent run for the global reaper to clobber.
  • Supply chain: all actions pinned to full commit SHAs (checkout v7.0.0, setup-python v6.3.0, upload-artifact v7.0.1); Dependabot bumps the SHA + comment weekly.
  • timeout-minutes: 75; per-host logs uploaded as artifacts-<run_id> on every run.

Before first run

Add the DO_API_TOKEN secret (write scopes) in Settings → Secrets and variables → Actions.

Add a workflow_dispatch-only GitHub Actions workflow that runs the full
DigitalOcean e2e acceptance suite (make test) on demand, plus Dependabot
to keep the pinned actions current.

- Inputs for brigade/flintlock refs, DO region, droplet size, microVM
  kernel/rootfs images, and an optional RUN_ID.
- DO_API_TOKEN is the only secret; an ephemeral ed25519 keypair is
  generated per run rather than stored.
- Concurrency serializes runs and never cancels in-flight ones, so the
  global reaper safety-net (make clean-tags, run on cancel/failure)
  cannot clobber a concurrent run.
- All actions pinned to full commit SHAs; Dependabot bumps them weekly.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds baseline repository automation by introducing an on-demand GitHub Actions workflow to run the full DigitalOcean-backed end-to-end acceptance suite, plus Dependabot config to keep SHA-pinned actions up to date.

Changes:

  • Add a workflow_dispatch-only e2e workflow that provisions DO infra and runs make test, then uploads artifacts/**.
  • Add weekly Dependabot updates for the github-actions ecosystem to refresh pinned action SHAs.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

File Description
.github/workflows/e2e.yml New manual-dispatch workflow to run the full DO e2e suite with serialized concurrency and artifact upload.
.github/dependabot.yml Enable weekly Dependabot updates for GitHub Actions to keep SHA pins current.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/e2e.yml Outdated
Comment thread .github/workflows/e2e.yml Outdated
Comment on lines +83 to +88
- name: Reap leaked infra (safety-net on cancel/failure)
# Serialized runs (concurrency above) mean no concurrent run exists for
# the global reaper to clobber. Covers the leak-on-kill gap when a job
# timeout / manual Cancel SIGKILLs the process before teardown finishes.
if: cancelled() || failure()
run: make clean-tags
Comment thread .github/workflows/e2e.yml Outdated
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: artifacts-${{ github.run_id }}
Comment thread .github/workflows/e2e.yml
Comment on lines +1 to +2
name: e2e

- Add least-privilege permissions (contents: read) to the workflow.
- Fix doc comment to reference AGENTS.md/README.md instead of CLAUDE.md.
- Name uploaded artifacts by the RUN_ID input when provided, falling back
  to github.run_id.
- Replace the in-job cancelled()/failure() reaper step with a separate
  workflow_run-triggered reaper.yml that fires after the e2e run
  concludes, so cleanup still runs when the e2e runner is terminated on
  manual Cancel or timeout. It shares the e2e-acceptance concurrency
  group so the global reaper can never clobber a live run, and only reaps
  when the e2e conclusion was failure or cancelled.
Copilot AI review requested due to automatic review settings July 17, 2026 20:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.

Comment on lines +22 to +23
# A green run tore down its own infra; only clean up when it did not succeed.
if: ${{ github.event.workflow_run.conclusion == 'failure' || github.event.workflow_run.conclusion == 'cancelled' }}
Comment thread .github/workflows/e2e.yml
Comment on lines +52 to +55
DO_DROPLET_SIZE: ${{ inputs.droplet_size }}
MICROVM_KERNEL_IMAGE: ${{ inputs.microvm_kernel_image }}
MICROVM_ROOTFS_IMAGE: ${{ inputs.microvm_rootfs_image }}
RUN_ID: ${{ inputs.run_id }}
Comment thread .github/workflows/e2e.yml
Comment on lines +27 to +29
run_id:
description: Optional RUN_ID (blank = suite auto-generates at-<hex>)
default: ""
Comment thread .github/workflows/e2e.yml
Comment on lines +93 to +95
with:
name: artifacts-${{ inputs.run_id || github.run_id }}
path: artifacts/**
@richardcase
richardcase merged commit 11027c1 into main Jul 17, 2026
1 check passed
@richardcase
richardcase deleted the ci/manual-e2e-workflow branch July 17, 2026 20:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants