diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..970bb07c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: CI + +on: + pull_request: + merge_group: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + verifications: + name: Verifications + uses: ./.github/workflows/verifications.yml + + required-checks: + name: Require CI status checks + runs-on: ubuntu-latest + if: ${{ !cancelled() && github.event.action != 'closed' }} + needs: [verifications] + steps: + - run: ${{ !contains(needs.*.result, 'failure') }} + - run: ${{ !contains(needs.*.result, 'cancelled') }} diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml deleted file mode 100644 index 1a253d40..00000000 --- a/.github/workflows/pipeline.yml +++ /dev/null @@ -1,109 +0,0 @@ -name: Pipeline - -on: - push: - branches: - # semantic-release valid branches and all-contributors branches - - '+([0-9])?(.{+([0-9]),x}).x' - - 'main' - - 'next' - - 'next-major' - - 'beta' - - 'alpha' - - 'all-contributors/**' - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - code_validation: - name: 'Code Validation: ${{ matrix.validation_script }}' - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - validation_script: - ['lint', 'type-check', 'format:check', 'generate-all:check'] - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Use Node - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - - name: Install dependencies - uses: bahmutov/npm-install@v1 - with: - useLockFile: false - - - name: Run script - run: npm run ${{ matrix.validation_script }} - - tests: - name: Tests (Node v${{ matrix.node }} - ESLint v${{ matrix.eslint }}) - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - # The .x indicates "the most recent one" - node: [19.x, 18.x, 17.x, 16.x, 14.x, 14.17.0, 12.x, 12.22.0] - eslint: [7.5, 7, 8] - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Use Node - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - - name: Install dependencies - uses: bahmutov/npm-install@v1 - with: - useLockFile: false - - - name: Install ESLint v${{ matrix.eslint }} - run: npm install --no-save --force eslint@${{ matrix.eslint }} - - - name: Run tests - run: npm run test:ci - - release: - name: NPM Release - needs: [code_validation, tests] - runs-on: ubuntu-latest - if: - ${{ github.repository == 'testing-library/eslint-plugin-testing-library' && - contains('refs/heads/main,refs/heads/beta,refs/heads/next,refs/heads/alpha', - github.ref) && github.event_name == 'push' }} - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Use Node - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - - name: Install dependencies - uses: bahmutov/npm-install@v1 - with: - useLockFile: false - - - name: Build package - run: npm run build - - - name: Release the new version to NPM - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_AUTOMATION_TOKEN }} - run: npx semantic-release diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..f6f6bfdd --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,43 @@ +name: Release + +on: + push: + branches: + # semantic-release valid branches + - '+([0-9])?(.{+([0-9]),x}).x' + - 'main' + - 'next' + - 'next-major' + - 'beta' + - 'alpha' + +concurrency: + group: release + cancel-in-progress: false + +jobs: + publish: + name: Publish NPM package + runs-on: ubuntu-latest + # Avoid publishing in forks + if: github.repository == 'testing-library/eslint-plugin-testing-library' + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + + - name: Install dependencies + uses: bahmutov/npm-install@v1 + + - name: Build package + run: npm run build + + - name: Release new version + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_AUTOMATION_TOKEN }} + run: npx semantic-release diff --git a/.github/workflows/verifications.yml b/.github/workflows/verifications.yml new file mode 100644 index 00000000..d2fbf176 --- /dev/null +++ b/.github/workflows/verifications.yml @@ -0,0 +1,55 @@ +name: Verifications + +on: + workflow_call: + +jobs: + code-validation: + name: 'Code Validation: ${{ matrix.validation-script }}' + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + validation-script: + ['lint', 'type-check', 'format:check', 'generate-all:check'] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + + - name: Install dependencies + uses: bahmutov/npm-install@v1 + + - name: Run script + run: npm run ${{ matrix.validation-script }} + + tests: + name: Tests (Node v${{ matrix.node }} - ESLint v${{ matrix.eslint }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # The .x indicates "the most recent one" + node: [19.x, 18.x, 17.x, 16.x, 14.x, 14.17.0, 12.x, 12.22.0] + eslint: [7.5, 7, 8] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + + - name: Install dependencies + uses: bahmutov/npm-install@v1 + + - name: Install ESLint v${{ matrix.eslint }} + run: npm install --no-save --force eslint@${{ matrix.eslint }} + + - name: Run tests + run: npm run test:ci