ci: tag fixes and robustness to workflow failures (#3838)
This commit is contained in:
parent
f17de26ab0
commit
a7d1449e9d
10 changed files with 125 additions and 35 deletions
16
.github/workflows/docker-build.yml
vendored
16
.github/workflows/docker-build.yml
vendored
|
|
@ -76,10 +76,10 @@ jobs:
|
|||
echo "nightly_build=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Check out the code at a specific ref (e.g., nightly tag)
|
||||
- name: Check out the code at a specific ref
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ steps.resolve-nightly-tag.outputs.nightly_tag || github.ref }}
|
||||
ref: ${{ inputs.nightly_tag_main || github.ref }}
|
||||
- name: Set up Python 3.12 + Poetry ${{ env.POETRY_VERSION }}
|
||||
uses: "./.github/actions/poetry_caching"
|
||||
with:
|
||||
|
|
@ -114,10 +114,10 @@ jobs:
|
|||
env:
|
||||
NIGHTLY_TAG: ${{ needs.get-version.outputs.nightly-tag }}
|
||||
steps:
|
||||
- name: Check out the code at a specific ref (e.g., nightly tag)
|
||||
- name: Check out the code at a specific ref
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ env.NIGHTLY_TAG || github.ref }}
|
||||
ref: ${{ inputs.nightly_tag_main || github.ref }}
|
||||
|
||||
- name: Set Dockerfile and Tags
|
||||
id: set-vars
|
||||
|
|
@ -145,10 +145,10 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
needs: [get-version, setup]
|
||||
steps:
|
||||
- name: Check out the code at a specific ref (e.g., nightly tag)
|
||||
- name: Check out the code at a specific ref
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ needs.get-version.outputs.nightly-tag || github.ref }}
|
||||
ref: ${{ inputs.nightly_tag_main || github.ref }}
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
|
|
@ -210,10 +210,10 @@ jobs:
|
|||
tags: ${{ format('ghcr.io/langflow-ai/langflow-frontend{0}:{1},ghcr.io/langflow-ai/langflow-frontend{0}:latest', needs.get-version.outputs.nightly-build && '-nightly' || '', needs.get-version.outputs.version) }}
|
||||
langflow_image: ghcr.io/langflow-ai/langflow${{ needs.get-version.outputs.nightly-build && '-nightly' || '' }}:${{ needs.get-version.outputs.version }}
|
||||
steps:
|
||||
- name: Check out the code at a specific ref (e.g., nightly tag)
|
||||
- name: Check out the code at a specific ref
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ needs.get-version.outputs.nightly-tag || github.ref }}
|
||||
ref: ${{ inputs.nightly_tag_main || github.ref }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
|
|
|||
106
.github/workflows/nightly_build.yml
vendored
106
.github/workflows/nightly_build.yml
vendored
|
|
@ -12,6 +12,7 @@ env:
|
|||
|
||||
jobs:
|
||||
create-nightly-tag:
|
||||
if: github.repository == 'langflow-ai/langflow'
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
|
|
@ -20,8 +21,8 @@ jobs:
|
|||
# Required to create tag
|
||||
contents: write
|
||||
outputs:
|
||||
main_tag: ${{ steps.create_tag.outputs.main_tag }}
|
||||
base_tag: ${{ steps.create_tag.outputs.base_tag }}
|
||||
main_tag: ${{ steps.generate_main_tag.outputs.main_tag }}
|
||||
base_tag: ${{ steps.set_base_tag.outputs.base_tag }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
|
@ -40,53 +41,125 @@ jobs:
|
|||
poetry env use ${{ env.PYTHON_VERSION }}
|
||||
poetry install
|
||||
|
||||
- name: Create tag
|
||||
id: create_tag
|
||||
- name: Generate main nightly tag
|
||||
id: generate_main_tag
|
||||
run: |
|
||||
# NOTE: This outputs the tag with the `v` prefix.
|
||||
MAIN_TAG="$(poetry run python ./scripts/ci/pypi_nightly_tag.py main)"
|
||||
echo "main_tag=$MAIN_TAG" >> $GITHUB_OUTPUT
|
||||
echo "main_tag=$MAIN_TAG"
|
||||
|
||||
- name: Check if main tag already exists
|
||||
id: check_main_tag
|
||||
run: |
|
||||
git fetch --tags
|
||||
if git rev-parse -q --verify "refs/tags/${{ steps.generate_main_tag.outputs.main_tag }}" >/dev/null; then
|
||||
echo "main_tag_exists=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "main_tag_exists=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Generate base nightly tag
|
||||
id: generate_base_tag
|
||||
if: ${{ steps.check_main_tag.outputs.main_tag_exists == 'false' }}
|
||||
run: |
|
||||
# NOTE: This outputs the tag with the `v` prefix.
|
||||
BASE_TAG="$(poetry run python ./scripts/ci/pypi_nightly_tag.py base)"
|
||||
echo "base_tag=$BASE_TAG" >> $GITHUB_OUTPUT
|
||||
echo "base_tag=$BASE_TAG"
|
||||
|
||||
- name: Commit tag
|
||||
id: commit_tag
|
||||
if: ${{ steps.check_main_tag.outputs.main_tag_exists == 'false' }}
|
||||
run: |
|
||||
# If the main tag does not exist in GH, we create the base tag from the existing codebase.
|
||||
|
||||
git config --global user.email "bot-nightly-builds@langflow.org"
|
||||
git config --global user.name "Langflow Bot"
|
||||
|
||||
# WARNING: These scripts must be run in this order.
|
||||
# Poetry will use a different cached virtual environment once the main pyproject.toml
|
||||
# project-name is updated, which does not have dependencies installed.
|
||||
BASE_TAG="$(poetry run python ./scripts/ci/pypi_nightly_tag.py base)"
|
||||
echo "base_tag=$BASE_TAG" >> $GITHUB_OUTPUT
|
||||
BASE_TAG="${{ steps.generate_base_tag.outputs.base_tag }}"
|
||||
echo "Updating base project version to $BASE_TAG"
|
||||
poetry run python ./scripts/ci/update_pyproject_name.py langflow-base-nightly base
|
||||
poetry run python ./scripts/ci/update_pyproject_version.py $BASE_TAG base
|
||||
|
||||
# This updates the dependency of langflow-base to langflow-base-nightly in {project_root}/pyproject.toml
|
||||
poetry run python ./scripts/ci/update_lf_base_dependency.py $BASE_TAG
|
||||
|
||||
MAIN_TAG="$(poetry run python ./scripts/ci/pypi_nightly_tag.py main)"
|
||||
echo "main_tag=$MAIN_TAG" >> $GITHUB_OUTPUT
|
||||
# Use the main tag created earlier
|
||||
MAIN_TAG="${{ steps.generate_main_tag.outputs.main_tag }}"
|
||||
echo "Updating main project version to $MAIN_TAG"
|
||||
poetry run python ./scripts/ci/update_pyproject_version.py $MAIN_TAG main
|
||||
poetry run python ./scripts/ci/update_pyproject_name.py langflow-nightly main
|
||||
|
||||
git add pyproject.toml src/backend/base/pyproject.toml
|
||||
git commit -m "Update version and project name in files"
|
||||
git commit -m "Update version and project name"
|
||||
|
||||
git tag -a $MAIN_TAG -m "Langflow nightly $MAIN_TAG"
|
||||
git push origin $MAIN_TAG || echo "Tag push failed. Check if the tag already exists."
|
||||
echo "Tagging main with $MAIN_TAG"
|
||||
if ! git tag -a $MAIN_TAG -m "Langflow nightly $MAIN_TAG"; then
|
||||
echo "Tag creation failed. Exiting the workflow."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Pushing main tag $MAIN_TAG"
|
||||
if ! git push origin $MAIN_TAG; then
|
||||
echo "Tag push failed. Check if the tag already exists. Exiting the workflow."
|
||||
exit 1
|
||||
fi
|
||||
# TODO: notify on failure
|
||||
|
||||
- name: Checkout main nightly tag
|
||||
uses: actions/checkout@v4
|
||||
if: ${{ steps.check_main_tag.outputs.main_tag_exists == 'true' }}
|
||||
with:
|
||||
ref: ${{ steps.generate_main_tag.outputs.main_tag }}
|
||||
|
||||
- name: Retrieve Base Tag
|
||||
id: retrieve_base_tag
|
||||
if: ${{ steps.check_main_tag.outputs.main_tag_exists == 'true' }}
|
||||
working-directory: src/backend/base
|
||||
run: |
|
||||
# If the main tag already exists, we need to retrieve the base version from the main tag codebase.
|
||||
version=$(poetry version --short)
|
||||
echo "base_tag=v$version" >> $GITHUB_OUTPUT
|
||||
echo "base_tag=v$version"
|
||||
|
||||
- name: Set Base Tag
|
||||
id: set_base_tag
|
||||
run: |
|
||||
if [ "${{ steps.retrieve_base_tag.conclusion }}" != "skipped" ] && [ "${{ steps.retrieve_base_tag.outputs.base_tag }}" ]; then
|
||||
BASE_TAG="${{ steps.retrieve_base_tag.outputs.base_tag }}"
|
||||
echo "base_tag=$BASE_TAG" >> $GITHUB_OUTPUT
|
||||
echo "base_tag=$BASE_TAG"
|
||||
elif [ "${{ steps.commit_tag.conclusion }}" != "skipped" ] && [ "${{ steps.generate_base_tag.outputs.base_tag }}" ]; then
|
||||
BASE_TAG="${{ steps.generate_base_tag.outputs.base_tag }}"
|
||||
echo "base_tag=$BASE_TAG" >> $GITHUB_OUTPUT
|
||||
echo "base_tag=$BASE_TAG"
|
||||
else
|
||||
echo "No base tag found. Exiting the workflow."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
frontend-tests:
|
||||
if: github.repository == 'langflow-ai/langflow'
|
||||
name: Run Frontend Tests
|
||||
needs: create-nightly-tag
|
||||
uses: ./.github/workflows/typescript_test.yml
|
||||
with:
|
||||
tests_folder: "tests/core"
|
||||
ref: ${{ needs.create-nightly-tag.outputs.tag }}
|
||||
secrets:
|
||||
OPENAI_API_KEY: "${{ secrets.OPENAI_API_KEY }}"
|
||||
STORE_API_KEY: "${{ secrets.STORE_API_KEY }}"
|
||||
ref: ${{ needs.create-nightly-tag.outputs.main_tag }}
|
||||
secrets: inherit
|
||||
|
||||
backend-unit-tests:
|
||||
if: github.repository == 'langflow-ai/langflow'
|
||||
name: Run Backend Unit Tests
|
||||
needs: create-nightly-tag
|
||||
uses: ./.github/workflows/python_test.yml
|
||||
with:
|
||||
python-versions: '["3.10", "3.11", "3.12"]'
|
||||
ref: ${{ needs.create-nightly-tag.outputs.tag }}
|
||||
ref: ${{ needs.create-nightly-tag.outputs.main_tag }}
|
||||
|
||||
# Not making nightly builds dependent on integration test success
|
||||
# due to inherent flakiness of 3rd party integrations
|
||||
|
|
@ -100,6 +173,7 @@ jobs:
|
|||
# ref: ${{ needs.create-nightly-tag.outputs.tag }}
|
||||
|
||||
release-nightly-build:
|
||||
if: github.repository == 'langflow-ai/langflow'
|
||||
name: Run Nightly Langflow Build
|
||||
needs: [frontend-tests, backend-unit-tests, create-nightly-tag]
|
||||
uses: ./.github/workflows/release_nightly.yml
|
||||
|
|
|
|||
4
.github/workflows/python_test.yml
vendored
4
.github/workflows/python_test.yml
vendored
|
|
@ -55,6 +55,7 @@ jobs:
|
|||
- name: Install Python dependencies
|
||||
run: |
|
||||
poetry env use ${{ matrix.python-version }}
|
||||
poetry lock --no-update
|
||||
poetry install
|
||||
- name: Run unit tests
|
||||
uses: nick-fields/retry@v3
|
||||
|
|
@ -71,7 +72,7 @@ jobs:
|
|||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.branch || github.ref }}
|
||||
ref: ${{ inputs.ref || github.ref }}
|
||||
- name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }}
|
||||
uses: "./.github/actions/poetry_caching"
|
||||
with:
|
||||
|
|
@ -81,6 +82,7 @@ jobs:
|
|||
- name: Install Python dependencies
|
||||
run: |
|
||||
poetry env use ${{ matrix.python-version }}
|
||||
poetry lock --no-update
|
||||
poetry install
|
||||
- name: Run integration tests
|
||||
run: make integration_tests_no_api_keys
|
||||
|
|
|
|||
8
.github/workflows/release_nightly.yml
vendored
8
.github/workflows/release_nightly.yml
vendored
|
|
@ -55,7 +55,7 @@ jobs:
|
|||
run:
|
||||
shell: bash
|
||||
steps:
|
||||
- name: Check out the code at a specific ref (e.g., nightly tag)
|
||||
- name: Check out the code at a specific ref
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.nightly_tag_main }}
|
||||
|
|
@ -77,7 +77,7 @@ jobs:
|
|||
working-directory: src/backend/base
|
||||
run: |
|
||||
name=$(poetry version | cut -d' ' -f1)
|
||||
version=$(poetry version --short)
|
||||
version=v$(poetry version --short)
|
||||
if [ "$name" != "langflow-base-nightly" ]; then
|
||||
echo "Name $name does not match langflow-base-nightly. Exiting the workflow."
|
||||
exit 1
|
||||
|
|
@ -128,7 +128,7 @@ jobs:
|
|||
run:
|
||||
shell: bash
|
||||
steps:
|
||||
- name: Check out the code at a specific ref (e.g., nightly tag)
|
||||
- name: Check out the code at a specific ref
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.nightly_tag_main }}
|
||||
|
|
@ -147,7 +147,7 @@ jobs:
|
|||
- name: Verify Nightly Name and Version
|
||||
run: |
|
||||
name=$(poetry version | cut -d' ' -f1)
|
||||
version=$(poetry version --short)
|
||||
version=v$(poetry version --short)
|
||||
if [ "$name" != "langflow-nightly" ]; then
|
||||
echo "Name $name does not match langflow-nightly. Exiting the workflow."
|
||||
exit 1
|
||||
|
|
|
|||
1
.github/workflows/typescript_test.yml
vendored
1
.github/workflows/typescript_test.yml
vendored
|
|
@ -113,6 +113,7 @@ jobs:
|
|||
- name: Install Python dependencies
|
||||
run: |
|
||||
poetry env use ${{ env.PYTHON_VERSION }}
|
||||
poetry lock --no-update
|
||||
poetry install
|
||||
|
||||
- name: create .env
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue