feat: add /mesh explainer page and CTA button in infrastructure section #27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy Services to Fly.io | |
| on: | |
| push: | |
| branches: [main] | |
| tags: ['v*'] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: deploy-fly-${{ github.ref_name }} | |
| cancel-in-progress: false | |
| jobs: | |
| deploy-registry: | |
| name: Deploy mesh-registry | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup flyctl | |
| uses: superfly/flyctl-actions/setup-flyctl@master | |
| - name: Deploy registry to Fly.io | |
| run: flyctl deploy --remote-only | |
| working-directory: registry | |
| env: | |
| FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
| deploy-packages-website: | |
| name: Deploy mesh-packages website | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup flyctl | |
| uses: superfly/flyctl-actions/setup-flyctl@master | |
| - name: Deploy packages website to Fly.io | |
| run: flyctl deploy --remote-only | |
| working-directory: packages-website | |
| env: | |
| FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
| deploy-hyperpush-landing: | |
| name: Deploy hyperpush landing | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup flyctl | |
| uses: superfly/flyctl-actions/setup-flyctl@master | |
| - name: Deploy landing to Fly.io | |
| run: flyctl deploy --remote-only | |
| working-directory: mesher/landing | |
| env: | |
| FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
| health-check: | |
| name: Post-deploy health checks | |
| needs: [deploy-registry, deploy-packages-website, deploy-hyperpush-landing] | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Verify public surface contract | |
| shell: bash | |
| timeout-minutes: 8 | |
| run: | | |
| set -euo pipefail | |
| python3 scripts/lib/m034_public_surface_contract.py public-http --root "$GITHUB_WORKSPACE" --artifact-dir "$RUNNER_TEMP/m034-public-surface-contract" | |
| - name: Verify hyperpush landing | |
| shell: bash | |
| timeout-minutes: 5 | |
| run: | | |
| set -euo pipefail | |
| curl -fsSL https://hyperpush-landing.fly.dev > "$RUNNER_TEMP/hyperpush-landing.html" | |
| grep -q "hyperpush" "$RUNNER_TEMP/hyperpush-landing.html" | |
| grep -q "Open Source Error Tracking" "$RUNNER_TEMP/hyperpush-landing.html" | |
| - name: Verify blog API is live | |
| shell: bash | |
| timeout-minutes: 3 | |
| run: | | |
| set -euo pipefail | |
| POSTS=$(curl -fsSL https://hyperpush-landing.fly.dev/api/blog/posts) | |
| echo "$POSTS" | python3 -c " | |
| import json, sys | |
| d = json.load(sys.stdin) | |
| assert 'posts' in d, 'missing posts key' | |
| assert isinstance(d['posts'], list), 'posts is not a list' | |
| print('blog API ok --', len(d['posts']), 'published post(s)') | |
| " | |
| - name: Verify blog listing page renders | |
| shell: bash | |
| timeout-minutes: 3 | |
| run: | | |
| set -euo pipefail | |
| curl -fsSL https://hyperpush-landing.fly.dev/community/blog > "$RUNNER_TEMP/blog-listing.html" | |
| grep -q "Blog" "$RUNNER_TEMP/blog-listing.html" | |
| - name: Verify admin endpoint is auth-gated | |
| shell: bash | |
| timeout-minutes: 2 | |
| run: | | |
| set -euo pipefail | |
| STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ | |
| "https://hyperpush-landing.fly.dev/api/blog/posts?status=all") | |
| if [ "$STATUS" != "401" ]; then | |
| echo "ERROR: admin endpoint returned $STATUS (expected 401)" | |
| exit 1 | |
| fi | |
| echo "admin endpoint correctly returns 401 without credentials" |