Skip to content
Latchkey

babel-loader workflow (babel/babel-loader)

The babel-loader workflow from babel/babel-loader, explained and optimized by Latchkey.

C

CI health: C - fair

Run this on Latchkey for self-healing, caching, and up to 58% lower cost.

Grade your own workflow free or run it on Latchkey →
Source: babel/babel-loader.github/workflows/ci.ymlLicense MITView source

What it does

This is the babel-loader workflow from the babel/babel-loader repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
name: babel-loader

on: [push, pull_request]

permissions:
  contents: read #  to fetch code (actions/checkout)

jobs:
  test:
    name: Test - ${{ matrix.os }} - Node ${{ matrix.node-version }}, Babel ${{ matrix.babel-version }}, Webpack ${{ matrix.webpack-version }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node-version: [22, 24]
        babel-version: ["7", "8"]
        webpack-version: ["5"]
        include:
          - node-version: "20"
            webpack-version: "5"
            babel-version: "7"
            os: ubuntu-latest
          - node-version: "18"
            webpack-version: "5"
            babel-version: "7"
            os: ubuntu-latest
          - node-version: "18"
            webpack-version: "5"
            babel-version: "7"
            os: windows-latest
          - node-version: "18.20.0" # The minimum supported node version
            webpack-version: "5.61.0" # The minimum supported webpack version
            babel-version: "7"
            os: ubuntu-latest
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "yarn"
      - name: Install dependencies
        run: yarn
      - name: Install webpack ${{ matrix.webpack-version }}
        run: yarn add -D webpack@${{ matrix.webpack-version }}
      - name: Downgrade to Babel 7
        if: matrix.babel-version == '7'
        run: yarn up @babel/*@^7
      - name: Build babel-loader
        run: yarn run build
      - name: Run tests for webpack version ${{ matrix.webpack-version }}
        run: yarn test-only

  lint-coverage:
    name: Lint and Coverage - ${{ matrix.os }} - Node ${{ matrix.node-version }}, Webpack 5
    strategy:
      matrix:
        os: [ubuntu-latest]
        node-version: [latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "yarn"
      - name: Install dependencies
        run: yarn
      - name: Run tsc
        run: yarn tsc
      - name: Run lint and coverage tests
        run: yarn test
      - name: Submit coverage data to codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

The same workflow, on Latchkey

Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.

name: babel-loader
 
on: [push, pull_request]
 
permissions:
  contents: read #  to fetch code (actions/checkout)
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  test:
    timeout-minutes: 30
    name: Test - ${{ matrix.os }} - Node ${{ matrix.node-version }}, Babel ${{ matrix.babel-version }}, Webpack ${{ matrix.webpack-version }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node-version: [22, 24]
        babel-version: ["7", "8"]
        webpack-version: ["5"]
        include:
          - node-version: "20"
            webpack-version: "5"
            babel-version: "7"
            os: ubuntu-latest
          - node-version: "18"
            webpack-version: "5"
            babel-version: "7"
            os: ubuntu-latest
          - node-version: "18"
            webpack-version: "5"
            babel-version: "7"
            os: windows-latest
          - node-version: "18.20.0" # The minimum supported node version
            webpack-version: "5.61.0" # The minimum supported webpack version
            babel-version: "7"
            os: ubuntu-latest
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "yarn"
      - name: Install dependencies
        run: yarn
      - name: Install webpack ${{ matrix.webpack-version }}
        run: yarn add -D webpack@${{ matrix.webpack-version }}
      - name: Downgrade to Babel 7
        if: matrix.babel-version == '7'
        run: yarn up @babel/*@^7
      - name: Build babel-loader
        run: yarn run build
      - name: Run tests for webpack version ${{ matrix.webpack-version }}
        run: yarn test-only
 
  lint-coverage:
    timeout-minutes: 30
    name: Lint and Coverage - ${{ matrix.os }} - Node ${{ matrix.node-version }}, Webpack 5
    strategy:
      matrix:
        os: [ubuntu-latest]
        node-version: [latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "yarn"
      - name: Install dependencies
        run: yarn
      - name: Run tsc
        run: yarn tsc
      - name: Run lint and coverage tests
        run: yarn test
      - name: Submit coverage data to codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
 

What changed

1 third-party action is referenced by a movable tag. Pin it to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.

This workflow runs 2 jobs (9 with the matrix expanded) per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow