Skip to content
Latchkey

Core / Build Develop workflow (frappe/frappe_docker)

The Core / Build Develop workflow from frappe/frappe_docker, 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: frappe/frappe_docker.github/workflows/core-build-develop.ymlLicense MITView source

What it does

This is the Core / Build Develop workflow from the frappe/frappe_docker 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: Core / Build Develop

permissions:
  contents: read
  packages: write

on:
  workflow_call:

  pull_request:
    branches:
      - main
    paths:
      - images/production/**
      - overrides/**
      - tests/**
      - compose.yaml
      - docker-bake.hcl
      - example.env
      - .github/workflows/core-build-develop.yml
      - .github/workflows/core-build-test-images.yml
      - .github/workflows/core-publish-images.yml

  schedule:
    # Every day at 12:00 pm
    - cron: 0 0 * * *

  workflow_dispatch:

jobs:
  test:
    uses: ./.github/workflows/core-build-test-images.yml
    with:
      repo: erpnext
      version: develop
      python_version: 3.14.2
      node_version: 24.12.0

  publish:
    if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
    needs: test
    uses: ./.github/workflows/core-publish-images.yml
    with:
      repo: erpnext
      frappe_version: ${{ needs.test.outputs.frappe_version }}
      erpnext_version: ${{ needs.test.outputs.erpnext_version }}
      python_version: 3.14.2
      node_version: 24.12.0
    secrets:
      DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
      DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}

The same workflow, on Latchkey

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

name: Core / Build Develop
 
permissions:
  contents: read
  packages: write
 
on:
  workflow_call:
 
  pull_request:
    branches:
      - main
    paths:
      - images/production/**
      - overrides/**
      - tests/**
      - compose.yaml
      - docker-bake.hcl
      - example.env
      - .github/workflows/core-build-develop.yml
      - .github/workflows/core-build-test-images.yml
      - .github/workflows/core-publish-images.yml
 
  schedule:
    # Every day at 12:00 pm
    - cron: 0 0 * * *
 
  workflow_dispatch:
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  test:
    timeout-minutes: 30
    uses: ./.github/workflows/core-build-test-images.yml
    with:
      repo: erpnext
      version: develop
      python_version: 3.14.2
      node_version: 24.12.0
 
  publish:
    timeout-minutes: 30
    if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
    needs: test
    uses: ./.github/workflows/core-publish-images.yml
    with:
      repo: erpnext
      frappe_version: ${{ needs.test.outputs.frappe_version }}
      erpnext_version: ${{ needs.test.outputs.erpnext_version }}
      python_version: 3.14.2
      node_version: 24.12.0
    secrets:
      DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
      DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
 

What changed

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