Repository navigation
[pull] main from freeCodeCamp:main #2073
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: CI - Devcontainer | |
| on: | |
| pull_request: | |
| paths: | |
| - '.devcontainer/**' | |
| - 'docker/devcontainer/**' | |
| - 'docker/docker-compose.yml' | |
| - '.github/workflows/devcontainer-ci.yml' | |
| - 'sample.env' | |
| - 'package.json' | |
| - 'turbo.json' | |
| - 'pnpm-lock.yaml' | |
| - 'client/package.json' | |
| - 'client/turbo.json' | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| jobs: | |
| validate: | |
| name: Validate | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4 | |
| - name: Install devcontainer CLI | |
| # renovate: datasource=npm depName=@devcontainers/cli | |
| run: npm install -g @devcontainers/cli@0.83.0 | |
| - name: Build the devcontainer image from this branch | |
| uses: docker/bake-action@018cb6412ab401ebaa809aa5f85966b74628600f # v7 | |
| with: | |
| files: docker/devcontainer/docker-bake.hcl | |
| targets: local-devcontainer | |
| load: true | |
| - name: Start devcontainer | |
| run: devcontainer up --workspace-folder . | |
| - name: Validate required tools | |
| run: | | |
| devcontainer exec --workspace-folder . pnpm --version | |
| devcontainer exec --workspace-folder . rsync --version | |
| devcontainer exec --workspace-folder . mongosh --version | |
| devcontainer exec --workspace-folder . node --version | |
| devcontainer exec --workspace-folder . git --version | |
| devcontainer exec --workspace-folder . gh --version | |
| - name: Validate MongoDB is writable | |
| run: | | |
| for i in $(seq 1 30); do | |
| if devcontainer exec --workspace-folder . mongosh --quiet --eval 'if (!db.hello().isWritablePrimary) quit(1)'; then | |
| echo "Replica set is writable" | |
| exit 0 | |
| fi | |
| echo "Waiting for a writable primary... (attempt $i/30)" | |
| sleep 2 | |
| done | |
| echo "Replica set failed to initialize" | |
| exit 1 | |
| - name: Validate Mailpit is reachable | |
| run: | | |
| devcontainer exec --workspace-folder . bash -c 'exec 3<>/dev/tcp/localhost/1025 && head -1 <&3' | |
| devcontainer exec --workspace-folder . bash -c 'exec 3<>/dev/tcp/localhost/8025' | |
| - name: Validate the generated .env | |
| run: | | |
| devcontainer exec --workspace-folder . grep -q '^MAILPIT_HOST=localhost$' .env | |
| devcontainer exec --workspace-folder . grep -q '^HOME_LOCATION=http://localhost:8000$' .env | |
| - name: Validate the client answers on IPv4 loopback | |
| run: | | |
| devcontainer exec --workspace-folder . bash -c ' | |
| FCC_SUPERBLOCK=responsive-web-design pnpm run develop > /tmp/develop.log 2>&1 & | |
| pid=$! | |
| deadline=$((SECONDS + 2400)) | |
| while [ "$SECONDS" -lt "$deadline" ]; do | |
| if ! kill -0 "$pid" 2>/dev/null; then | |
| echo "pnpm run develop exited before the client answered" | |
| cat /tmp/develop.log | |
| exit 1 | |
| fi | |
| if curl -sf -o /dev/null --max-time 10 http://127.0.0.1:8000/; then | |
| echo "The client answers on 127.0.0.1:8000" | |
| exit 0 | |
| fi | |
| sleep 5 | |
| done | |
| echo "The client never answered on 127.0.0.1:8000" | |
| cat /tmp/develop.log | |
| exit 1' | |
| - name: Validate the Codespaces URL rewrite | |
| run: | | |
| devcontainer exec --workspace-folder . env \ | |
| CODESPACE_NAME=ci-probe \ | |
| GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN=app.github.dev \ | |
| .devcontainer/codespace-env.sh | |
| devcontainer exec --workspace-folder . grep -q '^HOME_LOCATION=https://ci-probe-8000.app.github.dev$' .env | |
| devcontainer exec --workspace-folder . grep -q '^API_LOCATION=https://ci-probe-3000.app.github.dev$' .env |