refactor!: brand new issue driven exercise for creating and using reusable workflows #2
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: Step 2 | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| types: | |
| - opened | |
| - synchronize | |
| - reopened | |
| permissions: | |
| contents: write | |
| actions: write | |
| issues: write | |
| env: | |
| STEP_3_FILE: ".github/steps/3-step.md" | |
| jobs: | |
| find_exercise: | |
| name: Find Exercise Issue | |
| uses: skills/exercise-toolkit/.github/workflows/find-exercise-issue.yml@v0.9.0 | |
| check_step_work: | |
| name: Check step work | |
| runs-on: ubuntu-latest | |
| needs: [find_exercise] | |
| env: | |
| ISSUE_REPOSITORY: ${{ github.repository }} | |
| ISSUE_NUMBER: ${{ needs.find_exercise.outputs.issue-number }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Get response templates | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: skills/exercise-toolkit | |
| path: exercise-toolkit | |
| ref: v0.9.0 | |
| - name: Find last comment | |
| id: find-last-comment | |
| uses: peter-evans/find-comment@v4 | |
| with: | |
| repository: ${{ env.ISSUE_REPOSITORY }} | |
| issue-number: ${{ env.ISSUE_NUMBER }} | |
| direction: last | |
| - name: Update comment - checking work | |
| uses: GrantBirki/comment@v2.1.1 | |
| with: | |
| repository: ${{ env.ISSUE_REPOSITORY }} | |
| issue-number: ${{ env.ISSUE_NUMBER }} | |
| comment-id: ${{ steps.find-last-comment.outputs.comment-id }} | |
| file: exercise-toolkit/markdown-templates/step-feedback/checking-work.md | |
| edit-mode: replace | |
| # START: Check practical exercise | |
| - name: Check if ci.yml workflow file exists | |
| id: check-ci-file-exists | |
| continue-on-error: true | |
| uses: skills/exercise-toolkit/actions/file-exists@v0.9.0 | |
| with: | |
| file: .github/workflows/ci.yml | |
| - name: Check for reusable workflow call in ci.yml | |
| id: check-workflow-call | |
| continue-on-error: true | |
| uses: skills/action-keyphrase-checker@v1 | |
| with: | |
| text-file: .github/workflows/ci.yml | |
| keyphrase: 'uses:\s*\.\/\.github\/workflows\/reusable-node-quality\.yml' | |
| case-sensitive: true | |
| - name: Lint ci.yml with actionlint | |
| id: check-actionlint | |
| continue-on-error: true | |
| uses: raven-actions/actionlint@v2.1.1 | |
| with: | |
| files: .github/workflows/ci.yml | |
| version: 1.7.10 | |
| fail-on-error: true | |
| - name: Check workflow name is exactly CI | |
| id: check-workflow-name | |
| continue-on-error: true | |
| uses: skills/action-keyphrase-checker@v1 | |
| with: | |
| text-file: .github/workflows/ci.yml | |
| keyphrase: '^name:\s*CI' | |
| case-sensitive: true | |
| - name: Update comment - step results | |
| uses: GrantBirki/comment@v2.1.1 | |
| with: | |
| repository: ${{ env.ISSUE_REPOSITORY }} | |
| issue-number: ${{ env.ISSUE_NUMBER }} | |
| comment-id: ${{ steps.find-last-comment.outputs.comment-id }} | |
| edit-mode: replace | |
| file: exercise-toolkit/markdown-templates/step-feedback/step-results-table.md | |
| vars: | | |
| step_number: 2 | |
| results_table: | |
| - description: "Confirmed .github/workflows/ci.yml exists" | |
| passed: ${{ steps.check-ci-file-exists.outcome == 'success' }} | |
| - description: "Confirmed ci.yml calls the reusable node quality workflow" | |
| passed: ${{ steps.check-workflow-call.outcome == 'success' }} | |
| - description: "Confirmed ci.yml passes actionlint syntax checks" | |
| passed: ${{ steps.check-actionlint.outcome == 'success' }} | |
| - description: "Confirmed workflow name is exactly CI" | |
| passed: ${{ steps.check-workflow-name.outcome == 'success' }} | |
| # Add more checks as needed | |
| # END: Check practical exercise | |
| - name: Fail job if not all checks passed | |
| if: contains(steps.*.outcome, 'failure') | |
| run: exit 1 | |
| post_next_step_content: | |
| name: Post next step content | |
| needs: [find_exercise, check_step_work] | |
| runs-on: ubuntu-latest | |
| env: | |
| ISSUE_REPOSITORY: ${{ github.repository }} | |
| ISSUE_NUMBER: ${{ needs.find_exercise.outputs.issue-number }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Get response templates | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: skills/exercise-toolkit | |
| path: exercise-toolkit | |
| ref: v0.9.0 | |
| - name: Create comment - step finished | |
| uses: GrantBirki/comment@v2.1.1 | |
| with: | |
| repository: ${{ env.ISSUE_REPOSITORY }} | |
| issue-number: ${{ env.ISSUE_NUMBER }} | |
| file: exercise-toolkit/markdown-templates/step-feedback/step-finished-prepare-next-step.md | |
| vars: | | |
| next_step_number: 3 | |
| - name: Create comment - add step content | |
| uses: GrantBirki/comment@v2.1.1 | |
| with: | |
| repository: ${{ env.ISSUE_REPOSITORY }} | |
| issue-number: ${{ env.ISSUE_NUMBER }} | |
| file: ${{ env.STEP_3_FILE }} | |
| vars: | | |
| full_repo_name: ${{ github.repository }} | |
| - name: Create comment - watching for progress | |
| uses: GrantBirki/comment@v2.1.1 | |
| with: | |
| repository: ${{ env.ISSUE_REPOSITORY }} | |
| issue-number: ${{ env.ISSUE_NUMBER }} | |
| file: exercise-toolkit/markdown-templates/step-feedback/watching-for-progress.md | |
| - name: Wait for CI workflow run to complete | |
| # We must wait for the CI workflow to complete before enabling Step 3. | |
| # Step 3 triggers on `workflow_run: CI completed`. If we enable Step 3 | |
| # while CI is still running, the completion event will trigger Step 3 | |
| # prematurely (before the learner has done the Step 3 work). | |
| uses: skills/exercise-toolkit/actions/wait-for-workflow@v0.9.0 | |
| with: | |
| workflow-id: ci.yml | |
| status: completed | |
| head-sha: ${{ github.event.pull_request.head.sha }} | |
| polling-interval: 10 | |
| timeout: 180 | |
| fail-on-timeout: false | |
| - name: Disable current workflow and enable next one | |
| run: | | |
| gh workflow disable "${{github.workflow}}" | |
| gh workflow enable "Step 3" | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |