Skip to content

Cancel a currently running workflow from the same PR when a new workflow is triggered #845

Cancel a currently running workflow from the same PR when a new workflow is triggered

Cancel a currently running workflow from the same PR when a new workflow is triggered #845

Workflow file for this run

name: Build & Push Flyte Single Binary Images
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
on:
pull_request:
paths:
- .github/workflows/single-binary.yml
- charts/flyte-binary/**
- charts/flyte-sandbox/**
- cmd/**
- docker/sandbox-bundled/**
- Dockerfile
- go.*
push:
branches:
- master
- rc/*
workflow_dispatch:
jobs:
test-bootstrap:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: '1.19'
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
working-directory: docker/sandbox-bundled/bootstrap
- name: Check formatting
working-directory: docker/sandbox-bundled/bootstrap
run: |
make check-fmt
- name: Test
working-directory: docker/sandbox-bundled/bootstrap
run: |
make test
build-and-push-single-binary-image:
runs-on: ubuntu-latest
needs: [test-bootstrap]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Golang caches
uses: actions/cache@v3
with:
path: |
/root/.cache/go-build
/root/go/pkg/mod
key: ${{ runner.os }}-golang-${{ hashFiles('go.sum') }}
restore-keys: |
${{ runner.os }}-golang-
- name: Set versions
id: set_version
run: |
# TODO: Find a better way to determine the flyteconsole version
echo "FLYTECONSOLE_VERSION=$(yq eval '.flyteconsole.image.tag' charts/flyte-core/values.yaml)" >> $GITHUB_ENV
echo "FLYTE_VERSION=${{ github.sha }}" >> $GITHUB_ENV
- name: Prepare Image Names
id: image-names
uses: docker/metadata-action@v3
with:
# list of Docker images to use as base name for tags
images: |
ghcr.io/${{ github.repository_owner }}/flyte-binary
tags: |
type=raw,value=latest,enable=${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
type=sha,format=long
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Setup destination directories for image tarballs
run: |
mkdir -p docker/sandbox-bundled/images/tar/{arm64,amd64}
- name: Export ARM64 Image
uses: docker/build-push-action@v3
with:
context: .
platforms: linux/arm64
tags: flyte-binary:sandbox
build-args: |
FLYTECONSOLE_VERSION=${{ env.FLYTECONSOLE_VERSION }}
FLYTE_VERSION=${{ env.FLYTE_VERSION }}
file: Dockerfile
outputs: type=docker,dest=docker/sandbox-bundled/images/tar/arm64/flyte-binary.tar
- name: Export AMD64 Image
uses: docker/build-push-action@v3
with:
context: .
platforms: linux/amd64
tags: flyte-binary:sandbox
build-args: |
FLYTECONSOLE_VERSION=${{ env.FLYTECONSOLE_VERSION }}
FLYTE_VERSION=${{ env.FLYTE_VERSION }}
file: Dockerfile
outputs: type=docker,dest=docker/sandbox-bundled/images/tar/amd64/flyte-binary.tar
- name: Upload single binary image
uses: actions/upload-artifact@v2
with:
name: single-binary-image
path: docker/sandbox-bundled/images/tar
- name: Login to GitHub Container Registry
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
uses: docker/login-action@v2
with:
registry: ghcr.io
username: "${{ secrets.FLYTE_BOT_USERNAME }}"
password: "${{ secrets.FLYTE_BOT_PAT }}"
- name: Build and push Image
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
uses: docker/build-push-action@v3
with:
context: .
platforms: linux/arm64, linux/amd64
tags: ${{ steps.image-names.outputs.tags }}
build-args: |
FLYTECONSOLE_VERSION=${{ env.FLYTECONSOLE_VERSION }}
FLYTE_VERSION=${{ env.FLYTE_VERSION }}
file: Dockerfile
push: true
sandbox-bundled-functional-tests:
runs-on: ubuntu-latest
env:
FLYTESNACKS_PRIORITIES: 'P0'
FLYTESNACKS_VERSION: ''
timeout-minutes: 20
needs: [build-and-push-single-binary-image]
steps:
- name: Set latest Flytesnacks release
if: ${{ env.FLYTESNACKS_VERSION == '' }}
run: |
FLYTESNACKS_VERSION="$(curl --silent https://api.github.com/repos/flyteorg/flytesnacks/releases/latest | jq -r .tag_name)"
echo "FLYTESNACKS_VERSION=${FLYTESNACKS_VERSION}" >> ${GITHUB_ENV}
- name: Checkout
uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: single-binary-image
path: docker/sandbox-bundled/images/tar
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: image=moby/buildkit:master
buildkitd-flags: "--allow-insecure-entitlement security.insecure"
- name: Build sandbox image for functional tests
uses: docker/build-push-action@v3
with:
context: docker/sandbox-bundled
load: true
allow: "security.insecure"
tags: flyte-sandbox-bundled:local
# Without this, the GHA runner is under disk pressure and evicts all the pods.
# Buildx cache uses roughly 50% (7gb) of the GHA runner's disk (14gb).
- name: Prune Docker Buildx cache to reclaim storage
run: docker buildx prune --all --force
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- uses: unionai/[email protected]
- name: Setup sandbox
run: |
mkdir -p ~/.flyte/sandbox
cat << EOF > ~/.flyte/sandbox/config.yaml
task_resources:
defaults:
cpu: "0"
memory: "0"
limits:
cpu: "0"
memory: "0"
EOF
flytectl demo start --image flyte-sandbox-bundled:local --imagePullPolicy Never
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install flytekit flytekitplugins-deck-standard
pip freeze
- name: Checkout flytesnacks
uses: actions/checkout@v3
with:
repository: flyteorg/flytesnacks
path: flytesnacks
# TODO: Enable this once refactored version produces a release tag
# ref: ${{ env.FLYTESNACKS_VERSION }}
- name: Register specific tests
run: |
for f in \
basics/basics/hello_world.py \
basics/basics/workflow.py \
basics/basics/named_outputs.py \
advanced_composition/advanced_composition/chain_entities.py \
advanced_composition/advanced_composition/dynamics.py \
advanced_composition/advanced_composition/map_task.py \
advanced_composition/advanced_composition/subworkflows.py \
data_types_and_io/data_types_and_io/custom_objects.py \
data_types_and_io/data_types_and_io/schema.py \
data_types_and_io/data_types_and_io/typed_schema.py ;
do
pyflyte --config ./boilerplate/flyte/end2end/functional-test-config.yaml \
register \
--project flytesnacks \
--domain development \
--image cr.flyte.org/flyteorg/flytekit:py3.11-latest \
--version ${{ env.FLYTESNACKS_VERSION }} \
flytesnacks/examples/$f;
done
- name: End2End
run: |
make end2end_execute
build-and-push-sandbox-bundled-image:
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-latest
needs: [build-and-push-single-binary-image]
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: single-binary-image
path: docker/sandbox-bundled/images/tar
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: image=moby/buildkit:master
buildkitd-flags: "--allow-insecure-entitlement security.insecure"
- name: Set version
id: set_version
run: |
echo "FLYTE_SANDBOX_VERSION=${{ github.sha }}" >> $GITHUB_ENV
- name: Prepare Image Names
id: image-names
uses: docker/metadata-action@v3
with:
# list of Docker images to use as base name for tags
images: |
ghcr.io/${{ github.repository_owner }}/flyte-sandbox-bundled
tags: |
type=raw,value=latest,enable=${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
type=sha,format=long,
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: "${{ secrets.FLYTE_BOT_USERNAME }}"
password: "${{ secrets.FLYTE_BOT_PAT }}"
- name: Build and push multi-arch image
uses: docker/build-push-action@v3
with:
context: docker/sandbox-bundled
allow: "security.insecure"
platforms: linux/arm64, linux/amd64
tags: ${{ steps.image-names.outputs.tags }}
build-args: "FLYTE_SANDBOX_VERSION=${{ env.FLYTE_SANDBOX_VERSION }}"
push: true