Skip to content
Latchkey

Frontend CI workflow (GACWR/OpenUBA)

The Frontend CI workflow from GACWR/OpenUBA, explained and optimized by Latchkey.

C

CI health: C - fair

Point runs-on at Latchkey and get run de-duplication, job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: GACWR/OpenUBA.github/workflows/ci-frontend.ymlLicense Apache-2.0View source

What it does

This is the Frontend CI workflow from the GACWR/OpenUBA repository, a real project running GitHub Actions. It is shown here with attribution under its Apache-2.0 license.

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

The workflow

workflow (.yml)
name: Frontend CI

on:
  push:
    branches: [master, dev/**]
    paths:
      - "interface/**"
      - "docker/frontend.dockerfile"
  pull_request:
    branches: [master]

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: interface
    steps:
      - uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"
          cache: npm
          cache-dependency-path: interface/package-lock.json

      - name: Install dependencies
        run: npm install --legacy-peer-deps

      - name: Run ESLint
        run: npx next lint --quiet

  build:
    name: Build
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: interface
    steps:
      - uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"
          cache: npm
          cache-dependency-path: interface/package-lock.json

      - name: Install dependencies
        run: npm install --legacy-peer-deps

      - name: Build Next.js app
        run: npm run build
        env:
          NEXT_PUBLIC_API_URL: http://localhost:8000
          NEXT_PUBLIC_GRAPHQL_URL: /graphql

  typecheck:
    name: TypeScript check
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: interface
    steps:
      - uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"
          cache: npm
          cache-dependency-path: interface/package-lock.json

      - name: Install dependencies
        run: npm install --legacy-peer-deps

      - name: Run TypeScript compiler check
        run: npx tsc --noEmit

The same workflow, on Latchkey

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

name: Frontend CI
 
on:
  push:
    branches: [master, dev/**]
    paths:
      - "interface/**"
      - "docker/frontend.dockerfile"
  pull_request:
    branches: [master]
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  lint:
    timeout-minutes: 30
    name: Lint
    runs-on: latchkey-small
    defaults:
      run:
        working-directory: interface
    steps:
      - uses: actions/checkout@v4
 
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"
          cache: npm
          cache-dependency-path: interface/package-lock.json
 
      - name: Install dependencies
        run: npm install --legacy-peer-deps
 
      - name: Run ESLint
        run: npx next lint --quiet
 
  build:
    timeout-minutes: 30
    name: Build
    runs-on: latchkey-small
    defaults:
      run:
        working-directory: interface
    steps:
      - uses: actions/checkout@v4
 
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"
          cache: npm
          cache-dependency-path: interface/package-lock.json
 
      - name: Install dependencies
        run: npm install --legacy-peer-deps
 
      - name: Build Next.js app
        run: npm run build
        env:
          NEXT_PUBLIC_API_URL: http://localhost:8000
          NEXT_PUBLIC_GRAPHQL_URL: /graphql
 
  typecheck:
    timeout-minutes: 30
    name: TypeScript check
    runs-on: latchkey-small
    defaults:
      run:
        working-directory: interface
    steps:
      - uses: actions/checkout@v4
 
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"
          cache: npm
          cache-dependency-path: interface/package-lock.json
 
      - name: Install dependencies
        run: npm install --legacy-peer-deps
 
      - name: Run TypeScript compiler check
        run: npx tsc --noEmit
 

What changed

What Latchkey heals here

This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:

This workflow runs 3 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow