name: CI on: pull_request: types: [opened, synchronize] push: branches: [main, v3, v4] concurrency: group: "${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }}" cancel-in-progress: true jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v5 - name: Use node uses: actions/setup-node@v6 with: node-version: 24 cache: npm - name: Install dependencies run: npm ci - name: Build run: npm run @ci:build - name: Lint Code run: npm run @ci:lint test: runs-on: ubuntu-latest name: "test: node@${{ matrix.node }}" strategy: fail-fast: false matrix: node: [20, 22, 24] steps: - name: Checkout code uses: actions/checkout@v5 - name: Use node@${{ matrix.node }} uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} cache: npm - name: Install dependencies run: npm ci - name: Run tests run: npm run @ci:test - name: Report code coverage uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} release: runs-on: ubuntu-latest needs: [build, test] if: ${{ github.repository_owner == 'marko-js' && github.event_name == 'push' }} steps: - name: Checkout code uses: actions/checkout@v5 - name: Setup node uses: actions/setup-node@v6 with: node-version: 24 cache: npm - name: Install dependencies run: npm ci - name: Release id: changesets uses: changesets/action@v1 with: version: npm run @ci:version publish: npm run @ci:release commit: "[ci] release" title: "[ci] release" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Release Alias if: ${{ contains(steps.changesets.outputs.publishedPackages, '"@marko/runtime-tags"') }} run: npm run @ci:release-alias env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }}