instruction: Create a GitHub Actions workflow for CI/CD automation with automated testing
output: ## prombench.yml
  
  **Repository:** prometheus/prometheus
  **File Type:** Github Workflow
  **Purpose:** Production configuration from prometheus project
  
  ```yaml
  on:
    repository_dispatch:
      types: [prombench_start, prombench_restart, prombench_stop]
  name: Prombench Workflow
  permissions:
    contents: read
  env:
    AUTH_FILE: ${{ secrets.TEST_INFRA_PROVIDER_AUTH }}
    CLUSTER_NAME: test-infra
    DOMAIN_NAME: prombench.prometheus.io
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    GITHUB_ORG: prometheus
    GITHUB_REPO: prometheus
    GITHUB_STATUS_TARGET_URL: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}
    LAST_COMMIT_SHA: ${{ github.event.client_payload.LAST_COMMIT_SHA }}
    GKE_PROJECT_ID: macro-mile-203600
    PR_NUMBER: ${{ github.event.client_payload.PR_NUMBER }}
    PROVIDER: gke
    RELEASE: ${{ github.event.client_payload.RELEASE }}
    BENCHMARK_VERSION: ${{ github.event.client_payload.BENCHMARK_VERSION }}
    BENCHMARK_DIRECTORY: ${{ github.event.client_payload.BENCHMARK_DIRECTORY }}
    ZONE: europe-west3-a
  jobs:
    benchmark_start:
      name: Benchmark Start
      if: github.event.action == 'prombench_start'
      runs-on: ubuntu-latest
      steps:
        - name: Update status to pending
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"pending",  "context": "prombench-status-update-start", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
        - name: Run make deploy to start test
          id: make_deploy
          uses: docker://prominfra/prombench:master
          with:
            args: >-
              until make all_nodes_deleted; do echo "waiting for nodepools to be deleted"; sleep 10; done;
              make deploy;
        - name: Update status to failure
          if: failure()
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"failure",  "context": "prombench-status-update-start", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
        - name: Update status to success
          if: success()
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"success",  "context": "prombench-status-update-start", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
    benchmark_cancel:
      name: Benchmark Cancel
      if: github.event.action == 'prombench_stop'
      runs-on: ubuntu-latest
      steps:
        - name: Update status to pending
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"pending",  "context": "prombench-status-update-cancel", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
        - name: Run make clean to stop test
          id: make_clean
          uses: docker://prominfra/prombench:master
          with:
            args: >-
              until make all_nodes_running; do echo "waiting for nodepools to be created"; sleep 10; done;
              make clean;
        - name: Update status to failure
          if: failure()
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"failure",  "context": "prombench-status-update-cancel", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
        - name: Update status to success
          if: success()
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"success",  "context": "prombench-status-update-cancel", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
    benchmark_restart:
      name: Benchmark Restart
      if: github.event.action == 'prombench_restart'
      runs-on: ubuntu-latest
      steps:
        - name: Update status to pending
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"pending",  "context": "prombench-status-update-restart", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
        - name: Run make clean then make deploy to restart test
          id: make_restart
          uses: docker://prominfra/prombench:master
          with:
            args: >-
              until make all_nodes_running; do echo "waiting for nodepools to be created"; sleep 10; done;
              make clean;
              until make all_nodes_deleted; do echo "waiting for nodepools to be deleted"; sleep 10; done;
              make deploy;
        - name: Update status to failure
          if: failure()
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"failure",  "context": "prombench-status-update-restart", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
        - name: Update status to success
          if: success()
          run: >-
            curl -i -X POST
            -H "Authorization: Bearer $GITHUB_TOKEN"
            -H "Content-Type: application/json"
            --data '{"state":"success",  "context": "prombench-status-update-restart", "target_url": "'$GITHUB_STATUS_TARGET_URL'"}'
            "https://api.github.com/repos/$GITHUB_REPOSITORY/statuses/$LAST_COMMIT_SHA"
  
  ```
  
  This GitHub Actions workflow demonstrates production CI/CD practices including automated testing, building, and deployment.