World map

 

BM: Baca dalam Bahasa Melayu

World C1: Pipeline Thinking · Boss challenge

Draw the line

You will learn: how to design a pipeline that fits each team.

Checked with GitHub Actions 2026-10 on 31 Oct 2026

The problem

Tap each point on the timeline.

Three teams ask you for a pipeline. One size won’t fit all. Tap each team to meet them.

Try it

Team 1, Mak Siti’s kuih site. Which stations does it need?

Drag a card into a box. Or tap the card, then tap the box.

      Try it

      Here is Mak Siti’s line. Try the events. Find the one where the van stays parked.

      Try the events. Find the one asked for.

      What happened on GitHub

      Workflow file .github/workflows/site.yml

      name: Kuih site
      on:
      push:
      branches: [main]
      pull_request:
      permissions:
      contents: read
      jobs:
      test:
      runs-on: ubuntu-latest
      steps:
      - uses: actions/checkout@v7
      - run: npm ci && npm run lint && npm test
      deploy:
      needs: test
      if: github.event_name == 'push'
      runs-on: ubuntu-latest
      steps:
      - uses: actions/checkout@v7
      - run: npm ci && npm run build
      - run: npm run deploy
      env:
      CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
      

      The line

      Push to main · main

      Try it

      Team 2, the Kedai Kancil API. Put their stations in order.

      First station at the top. Put these in order. Use the arrows, or drag.

      • Run the tests
      • Deploy
      • Build the image
      • Lint the code
      • Scan the image
      • Publish to GHCR

      Predict

      Someone broke the API’s Dockerfile.

      Which station will stop the line? Tap it, then press Run.

      What happened on GitHub

      Workflow file .github/workflows/api.yml

      name: API line
      on:
      push:
      branches: [main]
      permissions:
      contents: read
      packages: write
      jobs:
      line:
      runs-on: ubuntu-latest
      steps:
      - uses: actions/checkout@v7
      - run: npm ci
      - run: npm run lint
      - run: npm test
      - run: docker build -t api:${{ github.sha }} .
      - name: Scan the image
      uses: aquasecurity/trivy-action@v0.36.0
      with:
      image-ref: api:${{ github.sha }}
      severity: CRITICAL
      exit-code: '1'
      - name: Publish to GHCR
      run: |
      echo "$TOKEN" | docker login ghcr.io -u "$GITHUB_ACTOR" --password-stdin
      docker tag api:${{ github.sha }} ghcr.io/kancil/api:${{ github.sha }}
      docker push ghcr.io/kancil/api:${{ github.sha }}
      env:
      TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: npm run deploy
      env:
      CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
      

      The line

      Push to main · main

      Predict

      Team 3, Klinik Ceria. They want staging, then production after a manager says go. Which design fits?

      Pick one answer.

      Try it

      Run Klinik Ceria’s line. When production waits, approve it for the manager, Dr Lim.

      Run it. When a job waits for you, check it and approve.

      What happened on GitHub

      Workflow file .github/workflows/release.yml

      name: Clinic release
      on:
      push:
      branches: [main]
      permissions:
      contents: read
      jobs:
      build:
      runs-on: ubuntu-latest
      steps:
      - uses: actions/checkout@v7
      - run: npm ci && npm test && npm run build
      - uses: actions/upload-artifact@v7
      with:
      name: site
      path: dist
      staging:
      needs: build
      runs-on: ubuntu-latest
      environment: staging
      steps:
      - uses: actions/checkout@v7
      - uses: actions/download-artifact@v8
      with:
      name: site
      path: dist
      - run: npx wrangler deploy --env staging
      env:
      CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
      - run: curl --fail --silent https://staging.example.com/health
      production:
      needs: staging
      runs-on: ubuntu-latest
      environment: production
      steps:
      - uses: actions/checkout@v7
      - uses: actions/download-artifact@v8
      with:
      name: site
      path: dist
      - run: npx wrangler deploy
      env:
      CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
      

      The line

      Push to main · main

      Check

      Good design, or needs work? Swipe each one.

      Swipe right for good, left for needs work. Or use the buttons.

      1 / 4

      Give every team the same six stations, always

      Give every team the same six stations, always

      You did it!

      You can now design a pipeline that fits the team.