name: i18n - Curriculum PR Validation on: pull_request: branches: - main concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.workflow_run.head_branch || github.ref }} cancel-in-progress: true jobs: ci: name: Validate i18n Builds # run only on PRs that camperbot opens with title that matches the curriculum sync if: ${{ github.event.pull_request.user.login == 'camperbot' && contains(github.event.pull_request.title, 'chore(i18n,learn)') }} runs-on: ubuntu-24.04 strategy: matrix: node-version: [24] steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: submodules: 'recursive' - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: ${{ matrix.node-version }} - name: Install pnpm uses: pnpm/action-setup@26f6d4f2c533a43e6b5da0b4a5dd983f98f7b49a # v6 id: pnpm-install with: run_install: false - name: Set freeCodeCamp Environment Variables run: | sed '/^[[:space:]]*#/d; /^$/d' sample.env >> $GITHUB_ENV - name: Install Dependencies run: pnpm install - name: Validate Challenge Files id: validate run: pnpm run audit-challenges - name: Create Comment # Run if the validate challenge files step fails, specifically. Note that we need the failure() call for this step to trigger if the action fails. if: ${{ failure() && steps.validate.conclusion == 'failure' }} uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 with: github-token: ${{secrets.CAMPERBOT_NO_TRANSLATE}} script: | await github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: "Hey @freecodecamp/i18n, it looks like we have new English curriculum files that need to be translated." })