There is no public GitHub Action anymore: the deploy-shuttle repository is
private, so uses: dev-toolings/deploy-shuttle@v1 no longer resolves.
Wiring doctor into CI is a couple of plain shell steps instead: download
the binary with your download token (see Install
for the full download/verify pattern), then run shuttle doctor and act on
its exit code or score.
Minimal workflow
name: Production readiness
on:
pull_request:
branches: [main]
schedule:
- cron: '0 7 * * 1' # Monday 07:00 UTC
jobs:
doctor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install shuttle
env:
SHUTTLE_DOWNLOAD_TOKEN: ${{ secrets.SHUTTLE_DOWNLOAD_TOKEN }}
run: |
release=$(curl -fsSL \
-H "Authorization: Bearer $SHUTTLE_DOWNLOAD_TOKEN" \
https://deployshuttle.pulseview.app/releases/latest)
url=$(echo "$release" | jq -r '.urls["shuttle-linux-x64"]')
expected_sha256=$(echo "$release" | jq -r '.sha256["shuttle-linux-x64"]')
curl -fsSL -o shuttle "$url"
echo "$expected_sha256 shuttle" | sha256sum -c -
chmod +x shuttle
sudo mv shuttle /usr/local/bin/shuttle
- name: Run Shuttle Doctor
run: |
shuttle doctor \
--target "$SSH_TARGET" \
--format json \
--output report.json \
--fail-below 80
env:
SSH_TARGET: ${{ secrets.SSH_TARGET }}
- name: Upload report
if: always()
uses: actions/upload-artifact@v4
with:
name: readiness-report
path: report.json
SSH access
If --target points at a remote host, add a step before shuttle doctor
to make the deploy key available:
- name: Set up SSH
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SSH_TARGET: ${{ secrets.SSH_TARGET }}
run: |
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H "$(echo "$SSH_TARGET" | cut -d@ -f2 | cut -d: -f1)" >> ~/.ssh/known_hosts
Reading the result
doctor --format json writes score, level, and findings to the output
file: read .score / .level with jq for a job summary, or rely on the
process exit code: 0 when the score clears --fail-below, 1 on any
critical finding or a threshold miss.
Self-hosted runners
The workflow above assumes bash, curl, jq, and sha256sum (use
shasum -a 256 instead on macOS runners) are available, which is true on
stock GitHub-hosted ubuntu-latest runners.