diff --git a/.github/workflows/fly-deploy.yml b/.github/workflows/fly-deploy.yml deleted file mode 100644 index 6c80fdf..0000000 --- a/.github/workflows/fly-deploy.yml +++ /dev/null @@ -1,32 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Deploy to Fly.io — runs after each release (once ghcr-publish.yml has pushed -# ghcr.io/hyperpolymath/echidna:full) and on workflow_dispatch. -# -# Prerequisites: -# 1. App created: flyctl apps create echidna-nesy -# 2. FLY_API_TOKEN secret set in repo: -# flyctl tokens create deploy -a echidna-nesy -# gh secret set FLY_API_TOKEN -b"" -R hyperpolymath/echidna -name: Deploy to Fly.io -on: - release: - types: [published] - workflow_dispatch: -permissions: - contents: read -jobs: - deploy: - name: Deploy echidna-nesy - runs-on: ubuntu-latest - timeout-minutes: 15 - permissions: - contents: read - steps: - - name: Checkout repository - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - - name: Install flyctl - uses: superfly/flyctl-actions/setup-flyctl@ed8efb33836e8b2096c7fd3ba1c8afe303ebbff1 # main 2025-06 - - name: Deploy - run: flyctl deploy --remote-only -a echidna-nesy - env: - FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} diff --git a/.github/workflows/instant-sync.yml b/.github/workflows/instant-sync.yml deleted file mode 100644 index 14f2f4d..0000000 --- a/.github/workflows/instant-sync.yml +++ /dev/null @@ -1,53 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Instant Forge Sync - Triggers propagation to all forges on push/release -name: Instant Sync - -on: - push: - branches: [main, master] - release: - types: [published] - -# Cause-B mitigation (#77): de-duplicate stacked sync runs. -# cancel-in-progress is false so an in-flight sync always completes. -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: false - -permissions: - contents: read - -jobs: - dispatch: - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Check FARM_DISPATCH_TOKEN presence - id: farm-token - env: - FARM_DISPATCH_TOKEN: ${{ secrets.FARM_DISPATCH_TOKEN }} - run: | - if [ -n "$FARM_DISPATCH_TOKEN" ]; then - echo "present=true" >> "$GITHUB_OUTPUT" - else - echo "present=false" >> "$GITHUB_OUTPUT" - echo "::notice::FARM_DISPATCH_TOKEN not set - skipping propagation" - fi - - - name: Trigger Propagation - if: steps.farm-token.outputs.present == 'true' - uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v3 - with: - token: ${{ secrets.FARM_DISPATCH_TOKEN }} - repository: hyperpolymath/.git-private-farm - event-type: propagate - client-payload: |- - { - "repo": "${{ github.event.repository.name }}", - "ref": "${{ github.ref }}", - "sha": "${{ github.sha }}", - "forges": "" - } - - - name: Confirm - run: echo "::notice::Propagation triggered for ${{ github.event.repository.name }}" diff --git a/.github/workflows/push-email-notify.yml b/.github/workflows/push-email-notify.yml deleted file mode 100644 index f5d5d39..0000000 --- a/.github/workflows/push-email-notify.yml +++ /dev/null @@ -1,34 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# Dormant push-email notification. ARMED by setting the repo variable -# PUSH_EMAIL_ENABLED=true (the single on/off switch). Addresses are pre-filled; -# sending needs the org SMTP secrets (SMTP_HOST/PORT/USER/PASS). Inherited by -# new repos from the template; placed on existing repos by the farm sweep. -name: Push email notification -on: - push: {} -permissions: - contents: read -jobs: - notify: - name: Email on push - if: ${{ vars.PUSH_EMAIL_ENABLED == 'true' }} - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Send push notification email - uses: dawidd6/action-send-mail@12335b969ae3fb71bee5f2c6b829744261aec34c # pinned - with: - server_address: ${{ secrets.SMTP_HOST }} - server_port: ${{ secrets.SMTP_PORT }} - secure: true - username: ${{ secrets.SMTP_USER }} - password: ${{ secrets.SMTP_PASS }} - from: "GitHub Push <${{ secrets.SMTP_USER }}>" - to: "jonathan.jewell@gmail.com j.d.a.jewell@open.ac.uk" - subject: "[${{ github.repository }}] push to ${{ github.ref_name }} by ${{ github.actor }}" - body: | - Repository: ${{ github.repository }} - Branch: ${{ github.ref_name }} - Pusher: ${{ github.actor }} - Compare: ${{ github.event.compare }} - Head msg: ${{ github.event.head_commit.message }} diff --git a/fly.toml b/fly.toml deleted file mode 100644 index 0014f34..0000000 --- a/fly.toml +++ /dev/null @@ -1,60 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 -# fly.io deployment for echidna. -# -# Public HTTPS: https://echidna-nesy.fly.dev/api/health -# Internal: echidna-nesy.flycast:8090 (proven-nesy-solver-api + other Fly apps) -# -# First deploy (one-time): -# flyctl apps create echidna-nesy -# flyctl secrets set FLY_API_TOKEN=... -a echidna-nesy # (CI sets this) -# flyctl deploy -a echidna-nesy -# -# Subsequent deploys are handled by .github/workflows/fly-deploy.yml on release. -# -# NB: Uses the pre-built ghcr.io/hyperpolymath/echidna:full image (published by -# ghcr-publish.yml on each release) to avoid building the 6-8 GB layer here. -# Memory >=4 GB required: Isabelle Main heap ~1 GB; Julia JIT overhead. - -app = "echidna-nesy" -primary_region = "lhr" -kill_signal = "SIGTERM" -kill_timeout = "10s" - -[build] - image = "ghcr.io/hyperpolymath/echidna:full" - -[env] - RUST_LOG = "info" - ECHIDNA_HOST = "[::]" - ECHIDNA_PORT = "8090" - -[processes] - app = "server --port 8090 --host [::] --cors" - -# Public HTTPS — terminates TLS at the Fly edge, forwards to internal :8090. -[http_service] - internal_port = 8090 - force_https = true - auto_stop_machines = "stop" - auto_start_machines = true - min_machines_running = 0 - processes = ["app"] - [http_service.concurrency] - type = "requests" - hard_limit = 25 - soft_limit = 20 - - # Grace period is generous: Isabelle Main heap maps ~1-2 GB on cold start; - # Julia has JIT overhead on first prover call. 90s is the minimum safe value. - [[http_service.checks]] - interval = "30s" - timeout = "10s" - grace_period = "90s" - method = "GET" - path = "/api/health" - -[[vm]] - size = "shared-cpu-2x" - memory = "4096mb" - cpu_kind = "shared" - cpus = 2