ci: allow releasing from branch#9988
Conversation
…cker build workflow
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughAdds new and updated GitHub Actions workflows for release and nightly builds, introduces a v2 Docker build workflow, rewires release/nightly pipelines to pass refs/tags and push flags, adds an optional CI input, enforces a warning gate on the legacy docker-build workflow, and updates Dockerfiles to tweak frontend build environment and memory limits. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Dev as Developer
participant ReleaseWF as release.yml
participant CI as ci.yml
participant BuildV2 as docker-build-v2.yml
participant GHCR as GHCR
participant DH as Docker Hub
participant Git as Git Tags
Dev->>ReleaseWF: workflow_dispatch(release_tag, flags)
ReleaseWF->>Git: Validate release_tag exists
Git-->>ReleaseWF: ok / fail
alt valid tag
ReleaseWF->>CI: workflow_call(branch=release_tag, package flags)
ReleaseWF->>BuildV2: call build-base(ref=release_tag, pre_release, push_to_registry)
ReleaseWF->>BuildV2: call build-main(ref=release_tag, pre_release, push_to_registry)
ReleaseWF->>BuildV2: call build-main-ep(ref=release_tag, pre_release, push_to_registry)
ReleaseWF->>BuildV2: call build-main-all(ref=release_tag, pre_release, push_to_registry)
BuildV2->>GHCR: login/push (conditional)
BuildV2->>DH: login/push (conditional)
ReleaseWF->>ReleaseWF: Create/Update Release (tag from build outputs)
else invalid tag
ReleaseWF-->>Dev: Fail: tag not found or branch exists
end
sequenceDiagram
autonumber
participant Nightly as nightly_build.yml
participant NightlyRel as release_nightly.yml
participant NightlyDocker as docker-nightly-build.yml
participant BuildV2 as docker-build-v2.yml
participant GHCR as GHCR
participant DH as Docker Hub
Nightly->>Nightly: Inputs(skip_frontend_tests, skip_backend_tests, push_to_registry)
alt frontend tests enabled
Nightly->>Nightly: Run frontend tests
else skipped
Note over Nightly: Frontend tests skipped
end
alt backend tests enabled
Nightly->>Nightly: Run backend tests
else skipped
Note over Nightly: Backend tests skipped
end
Nightly->>NightlyRel: workflow_call(push_to_registry)
NightlyRel->>NightlyDocker: call nightly-base/main/all (ref=nightly tag, push flag)
NightlyDocker->>GHCR: login/push (conditional)
NightlyDocker->>DH: login/push (conditional)
NightlyRel->>BuildV2: optional entrypoint variant call (ref=nightly tag)
sequenceDiagram
autonumber
participant Caller as docker-build.yml (legacy)
participant Gate as Verify warning check
participant Steps as Build Steps
Caller->>Gate: inputs.warning_check
alt warning_check == true
Gate-->>Steps: proceed
Steps->>Steps: get-version, build, push
else false
Gate-->>Caller: exit 1 with warning
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. ❌ Your project status has failed because the head coverage (47.02%) is below the target coverage (55.00%). You can increase the head coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## main #9988 +/- ##
==========================================
+ Coverage 23.67% 24.13% +0.45%
==========================================
Files 1090 1091 +1
Lines 39766 40014 +248
Branches 5542 5543 +1
==========================================
+ Hits 9415 9657 +242
- Misses 30180 30186 +6
Partials 171 171
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
.github/workflows/release.yml (2)
273-281: Cross-platform tests are now blocked when LFX isn't part of the releaseAdding
build-lfxto theneedsarray means this job is skipped wheneverinputs.release_lfxis false (the default). GitHub Actions propagates that skip, sopublish-base/publish-main(which need this job) now get skipped as well, effectively preventing any Langflow release unless LFX is also released. Please gate the dependency so it’s only required when the corresponding package is being built (e.g. break this into per-artifact jobs or conditionally includebuild-lfxinneeds).
470-499: GitHub release is skipped whenever LFX isn’t published
create_releasenow needsbuild-lfxandpublish-lfx. Wheninputs.release_lfxis false (default), both jobs are skipped, which causescreate_releaseto be skipped as well even if the main package published successfully. Result: every release that omits LFX fails to draft/update the GitHub release. Please remove the unconditional dependency on the optional LFX jobs (or introduce a helper job that always runs) so the release step executes whenever at least one artifact was published.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
-
.github/workflows/ci.yml(1 hunks) -
.github/workflows/docker-build-v2.yml(1 hunks) -
.github/workflows/docker-build.yml(3 hunks) -
.github/workflows/docker-nightly-build.yml(1 hunks) -
.github/workflows/nightly_build.yml(5 hunks) -
.github/workflows/release.yml(10 hunks) -
.github/workflows/release_nightly.yml(7 hunks) -
docker/build_and_push.Dockerfile(1 hunks) -
docker/build_and_push_base.Dockerfile(1 hunks) -
docker/build_and_push_ep.Dockerfile(1 hunks) -
docker/build_and_push_with_extras.Dockerfile(1 hunks)
👮 Files not reviewed due to content moderation or server errors (5)
- .github/workflows/ci.yml
- docker/build_and_push.Dockerfile
- docker/build_and_push_base.Dockerfile
- docker/build_and_push_with_extras.Dockerfile
- docker/build_and_push_ep.Dockerfile
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-07-18T18:27:12.609Z
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-07-18T18:27:12.609Z
Learning: Frontend builds should output static files to src/frontend/dist/ for production deployment.
Applied to files:
docker/build_and_push_with_extras.Dockerfiledocker/build_and_push_ep.Dockerfiledocker/build_and_push_base.Dockerfiledocker/build_and_push.Dockerfile
📚 Learning: 2025-06-23T12:46:42.048Z
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Frontend builds must be performed using Vite, with production output placed in the dist/ directory and served by the backend in production environments.
Applied to files:
docker/build_and_push_with_extras.Dockerfiledocker/build_and_push_ep.Dockerfiledocker/build_and_push.Dockerfile
📚 Learning: 2025-07-18T18:25:54.486Z
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-07-18T18:25:54.486Z
Learning: Applies to {tests/**/*.py,Makefile} : Run make unit_tests to execute backend unit tests
Applied to files:
.github/workflows/nightly_build.yml
🪛 actionlint (1.7.7)
.github/workflows/docker-nightly-build.yml
48-48: label "langflow-ai-arm64-40gb" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
128-128: label "langflow-ai-arm64-40gb" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
209-209: label "langflow-ai-arm64-40gb" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
.github/workflows/docker-build-v2.yml
58-58: label "langflow-ai-arm64-40gb" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
130-130: label "langflow-ai-arm64-40gb" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
208-208: label "langflow-ai-arm64-40gb" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
281-281: label "langflow-ai-arm64-40gb" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
.github/workflows/release_nightly.yml
376-376: if: condition "always() && ${{ inputs.build_docker_main == 'true' }}" is always evaluated to true because extra characters are around ${{ }}
(if-cond)
.github/workflows/docker-build.yml
30-30: input "warning_check" of workflow_call event has the default value "false", but it is also required. if an input is marked as required, its default value will never be used
(events)
🪛 YAMLlint (1.37.1)
.github/workflows/release.yml
[warning] 469-469: too many blank lines (3 > 2)
(empty-lines)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
- GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 5
- GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 2
- GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 3
- GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 4
- GitHub Check: Run Backend Tests / Unit Tests - Python 3.10 - Group 1
- GitHub Check: Test Starter Templates
| - name: Login to GitHub Container Registry | ||
| uses: docker/login-action@v3 | ||
| with: | ||
| registry: ghcr.io | ||
| username: ${{ github.actor }} | ||
| password: ${{ secrets.TEMP_GHCR_TOKEN}} | ||
|
|
There was a problem hiding this comment.
Fix GHCR login username before this ships
docker/login-action validates that the supplied username matches the owner of the PAT you pass in. Here we're combining ${{ github.actor }} with secrets.TEMP_GHCR_TOKEN, so any manual release (actor ≠ PAT owner) will get a 401 and the workflow stops before publishing to GHCR. Please switch to the actual PAT owner (store it as a secret/variable) so releases succeed regardless of who triggers them.
- username: ${{ github.actor }}
- password: ${{ secrets.TEMP_GHCR_TOKEN}}
+ username: ${{ secrets.GHCR_USERNAME }}
+ password: ${{ secrets.TEMP_GHCR_TOKEN }}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.TEMP_GHCR_TOKEN}} | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ secrets.GHCR_USERNAME }} | |
| password: ${{ secrets.TEMP_GHCR_TOKEN }} |
🤖 Prompt for AI Agents
In .github/workflows/docker-build-v2.yml around lines 102 to 108, the GHCR login
uses github.actor as the username while the PAT comes from
secrets.TEMP_GHCR_TOKEN, which will cause 401s when the workflow is triggered by
a different actor than the PAT owner; replace github.actor with a secret or
repo-level variable that holds the PAT owner's username (e.g.
secrets.GHCR_USERNAME), ensure that secret exists and matches the account that
owns TEMP_GHCR_TOKEN, and verify the PAT has the required write:packages scope
so GHCR publishing succeeds regardless of who triggers the workflow.
There was a problem hiding this comment.
Hm. It currently works as-is, so won't change this for now; though the comment seems correct
|
* Try skipping gha cache * simplify docker builds * remove workflow dispatch options from workflows that shouldn't be run manually * Update nightly docker build and add option to skip testing for nightly releases * simplify version fetching for both release workflows * revert docker-build v1 to original * remove removed input * Add push to registry flag for full workflow and add warning in old docker build workflow * Add uv setup * Add uv setup again * Try esbuild js native build * require a valid tag for release * Echo inputs * Reference inputs correctly * Try updating conditional * removes lfx temporarily for the 1.6 release * Fix boolean comparison * Add flag to allow creation of github release after pypi already exists * Add always to make it run * Use correct tag and remove commit since it's the tag for release * allow updates * Revert the lfx removals and flags to allow building without releasing * standardize conditional inputs * clean version check * temporary skip of jobs in release; revert me * Add arm64 to options * Try rustflags env var * echo the should_run_ci as well



Updates workflow to allow releasing from branch, as well as fixing a handful of issues and simplifying the docker builds.
Summary by CodeRabbit
New Features
Improvements
Chores