Langflow Release by @jordanrfrazier #218
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Langflow Release | |
run-name: Langflow Release by @${{ github.actor }} | |
on: | |
workflow_dispatch: | |
inputs: | |
release_package_base: | |
description: "Release Langflow Base" | |
required: true | |
type: boolean | |
default: false | |
release_package_main: | |
description: "Release Langflow" | |
required: true | |
type: boolean | |
default: false | |
build_docker_base: | |
description: "Build Docker Image for Langflow Base" | |
required: true | |
type: boolean | |
default: false | |
build_docker_main: | |
description: "Build Docker Image for Langflow" | |
required: true | |
type: boolean | |
default: false | |
pre_release: | |
description: "Pre-release" | |
required: false | |
type: boolean | |
default: false | |
create_release: | |
description: "Whether to create a gh release" | |
required: false | |
type: boolean | |
default: true | |
jobs: | |
ci: | |
# if: ${{ github.event.inputs.release_package_base == 'true' || github.event.inputs.release_package_main == 'true' }} | |
if: false | |
name: CI | |
uses: ./.github/workflows/ci.yml | |
with: | |
python-versions: "['3.10', '3.11', '3.12']" | |
frontend-tests-folder: "tests" | |
release-base: | |
name: Release Langflow Base | |
# needs: [ci] | |
if: inputs.release_package_base == true | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.check-version.outputs.version }} | |
skipped: ${{ steps.check-version.outputs.skipped }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Environment | |
uses: ./.github/actions/setup-uv | |
- name: Install the project | |
run: uv sync --dev | |
- name: Check Version | |
id: check-version | |
run: | | |
version=$(uv tree | grep 'langflow-base' | awk '{print $3}') | |
last_released_version=$(curl -s "https://pypi.org/pypi/langflow-base/json" | jq -r '.releases | keys | .[]' | sort -V | tail -n 1) | |
if [ "$version" = "$last_released_version" ]; then | |
echo "Version $version is already released. Skipping release." | |
echo skipped=true >> $GITHUB_OUTPUT | |
exit 0 | |
else | |
echo version=$version >> $GITHUB_OUTPUT | |
echo skipped=false >> $GITHUB_OUTPUT | |
fi | |
- name: Build project for distribution | |
if: steps.check-version.outputs.skipped == 'false' | |
run: make build base=true args="--wheel" | |
- name: Test CLI | |
if: steps.check-version.outputs.skipped == 'false' | |
run: | | |
echo "Testing CLI" | |
echo $(ls) | |
echo $(dist) | |
echo $(src/backend/base/dist) | |
mkdir src/backend/base/dist | |
mv dist/*.whl src/backend/base/dist | |
uv pip install src/backend/base/dist/*.whl | |
uv run python -m langflow run --host 127.0.0.1 --port 7860 --backend-only & | |
SERVER_PID=$! | |
# Wait for the server to start | |
timeout 120 bash -c 'until curl -f http://127.0.0.1:7860/api/v1/auto_login; do sleep 2; done' || (echo "Server did not start in time" && kill $SERVER_PID && exit 1) | |
# Terminate the server | |
kill $SERVER_PID || (echo "Failed to terminate the server" && exit 1) | |
sleep 10 # give the server some time to terminate | |
# Check if the server is still running | |
if kill -0 $SERVER_PID 2>/dev/null; then | |
echo "Failed to terminate the server" | |
exit 1 | |
else | |
echo "Server terminated successfully" | |
fi | |
- name: Publish to PyPI | |
if: false | |
env: | |
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }} | |
run: | | |
make publish base=true | |
- name: Upload Artifact | |
if: false | |
# if: steps.check-version.outputs.skipped == 'false' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-base | |
path: src/backend/base/dist | |
release-main: | |
name: Release Langflow Main | |
if: inputs.release_package_main == true | |
needs: [release-base] | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.check-version.outputs.version }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Environment | |
uses: ./.github/actions/setup-uv | |
- name: Install the project | |
run: uv sync --dev | |
# If pre-release is true, we need to check if ["a", "b", "rc", "dev", "post"] is in the version string | |
# if the version string is incorrect, we need to exit the workflow | |
- name: Check if pre-release | |
if: inputs.pre_release == 'true' | |
run: | | |
version=$(uv tree | grep 'langflow' | grep -v 'langflow-base' | awk '{print $2}' | sed 's/^v//') | |
if [[ "${version}" =~ ^([0-9]+\.)?([0-9]+\.)?[0-9]+((a|b|rc|dev|post)([0-9]+))$ ]]; then | |
echo "Pre-release version detected. Continuing with the release." | |
else | |
echo "Invalid pre-release version detected. Exiting the workflow." | |
exit 1 | |
fi | |
- name: Check Version | |
id: check-version | |
run: | | |
version=$(uv tree | grep 'langflow' | grep -v 'langflow-base' | awk '{print $2}' | sed 's/^v//') | |
last_released_version=$(curl -s "https://pypi.org/pypi/langflow/json" | jq -r '.releases | keys | .[]' | sort -V | tail -n 1) | |
if [ "$version" = "$last_released_version" ]; then | |
echo "Version $version is already released. Skipping release." | |
exit 1 | |
else | |
echo version=$version >> $GITHUB_OUTPUT | |
fi | |
- name: Wait for PyPI Propagation | |
# if: needs.release-base.outputs.skipped == 'false' | |
if: false | |
run: sleep 300 # wait for 5 minutes to ensure PyPI propagation | |
- name: Build project for distribution | |
run: make build main=true args="--no-sources --wheel" | |
- name: Test CLI | |
run: | | |
uv pip install dist/*.whl | |
uv run python -m langflow run --host 127.0.0.1 --port 7860 --backend-only & | |
SERVER_PID=$! | |
# Wait for the server to start | |
timeout 120 bash -c 'until curl -f http://127.0.0.1:7860/health_check; do sleep 2; done' || (echo "Server did not start in time" && kill $SERVER_PID && exit 1) | |
# Terminate the server | |
kill $SERVER_PID || (echo "Failed to terminate the server" && exit 1) | |
sleep 10 # give the server some time to terminate | |
# Check if the server is still running | |
if kill -0 $SERVER_PID 2>/dev/null; then | |
echo "Failed to terminate the server" | |
exit 1 | |
else | |
echo "Server terminated successfully" | |
fi | |
- name: Publish to PyPI | |
if: false | |
env: | |
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }} | |
run: | | |
make publish main=true | |
- name: Upload Artifact | |
if: false | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-main | |
path: dist | |
call_docker_build_base: | |
name: Call Docker Build Workflow for Langflow Base | |
if: inputs.build_docker_base == true | |
needs: release-base | |
uses: ./.github/workflows/docker-build.yml | |
with: | |
version: ${{ needs.release-base.outputs.version }} | |
release_type: base | |
pre_release: ${{ inputs.pre_release }} | |
secrets: inherit | |
call_docker_build_main: | |
name: Call Docker Build Workflow for Langflow | |
if: inputs.build_docker_main == true | |
needs: release-main | |
uses: ./.github/workflows/docker-build.yml | |
with: | |
version: ${{ needs.release-main.outputs.version }} | |
release_type: main | |
pre_release: ${{ inputs.pre_release }} | |
secrets: inherit | |
create_release: | |
name: Create Release | |
if: false | |
runs-on: ubuntu-latest | |
needs: release-main | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: dist-main | |
path: dist | |
- name: Create Release | |
uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "dist/*" | |
token: ${{ secrets.GITHUB_TOKEN }} | |
draft: false | |
generateReleaseNotes: true | |
prerelease: ${{ inputs.pre_release }} | |
tag: v${{ needs.release-main.outputs.version }} | |
commit: ${{ github.ref }} |