- Workflow:
Deploy to Staging(.github/workflows/staging.yml) - Trigger: push of a semver tag (
v*.*.*, for examplev1.0.0) - Environment: GitHub
staging - Tag policy in staging:
- annotated/signed tags are preferred,
- lightweight or unsigned tags are allowed for staging only.
Required staging secrets/vars:
SITE_BASE_URL(for examplehttps://staging.10000-blocks.com)NEXT_PUBLIC_SOLANA_RPC_URL(devnet is fine in staging; defaults tohttps://api.devnet.solana.comif not set)SOLANA_RPC_URL(optional override; falls back toNEXT_PUBLIC_SOLANA_RPC_URL)HETZNER_ACCESS_KEY_IDHETZNER_SECRET_ACCESS_KEYHETZNER_BUCKET_NAME(environment variable)HETZNER_REGION(optional, defaults tofsn1)HETZNER_ENDPOINT(optional)HETZNER_PUBLIC_BASE_URL(optional)SERVER_HOST(environment variable or secret)SSH_PRIVATE_KEY(secret)- Optional for staging upload guard fallback:
ALLOW_IN_MEMORY_UPLOAD_GUARDS=true - Optional shared guards:
UPSTASH_REDIS_REST_URLandUPSTASH_REDIS_REST_TOKEN
mainis green in CI.- Maintainers use signed commits.
- Release tag must be an annotated, signed tag.
- GitHub
productionenvironment secrets/vars are configured.NEXT_PUBLIC_SOLANA_RPC_URLmust be a mainnet endpoint (for examplehttps://api.mainnet-beta.solana.com).SOLANA_RPC_URLshould also be a mainnet endpoint (optional override; falls back toNEXT_PUBLIC_SOLANA_RPC_URL).SERVER_HOST(environment variable or secret)SSH_PRIVATE_KEY(secret)UPSTASH_REDIS_REST_URLandUPSTASH_REDIS_REST_TOKEN(recommended/expected for upload guards)- Keep
ALLOW_IN_MEMORY_UPLOAD_GUARDS=falsein production.
git checkout main
git pull
git tag -s vX.Y.Z -m "Release vX.Y.Z"
git push origin vX.Y.ZThis tag push triggers the staging deployment workflow.
- Open GitHub Actions >
Release to Production. - Click
Run workflow. - Set
release_tagto the signed tag you want to deploy (for examplev1.0.0). - Run the workflow.
Note: production smoke checks in the current workflow target https://10000-blocks.com.
- Builds and pushes an immutable container image to GHCR.
- Signs the image with keyless
cosign(OIDC). - Publishes build provenance attestation to the registry.
- Generates an SPDX JSON SBOM artifact.
- Deploys to production host and runs smoke checks.
Smoke checks currently validate:
GET /returns200GET /api/healthreturns200with upload config marked as configuredPOST /api/uploadwith dummy form fields returns400(route is reachable and configured)
Replace <image-ref> with ghcr.io/<owner>/<repo>@sha256:<digest>.
cosign verify <image-ref>
cosign verify-attestation --type slsaprovenance <image-ref>Download the SBOM artifact from the workflow run and inspect it with your preferred SBOM tooling.