From 91dd390c2109dd4f877394d1b77a81c6c39d8557 Mon Sep 17 00:00:00 2001 From: Joe Runde Date: Wed, 6 Mar 2024 11:51:37 -0700 Subject: [PATCH] :construction_worker: add ubi build to CI Signed-off-by: Joe Runde --- .github/actions/free-up-disk-space/action.yml | 36 +++++ .github/workflows/build.yml | 128 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 .github/actions/free-up-disk-space/action.yml create mode 100644 .github/workflows/build.yml diff --git a/.github/actions/free-up-disk-space/action.yml b/.github/actions/free-up-disk-space/action.yml new file mode 100644 index 000000000..b0c77401d --- /dev/null +++ b/.github/actions/free-up-disk-space/action.yml @@ -0,0 +1,36 @@ +name: "Free up disk space" +description: "Removes non-essential tools, libraries and cached files from GitHub action runner node" + +runs: + using: "composite" + steps: + - name: "Remove non-essential tools and libraries" + shell: bash + run: | + # https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 + echo "Disk usage before cleanup:" + df -h + echo "Removing non-essential tools and libraries ..." + sudo rm -rf /opt/ghc + sudo rm -rf /usr/local/.ghcup + sudo rm -rf /usr/share/dotnet + # sudo rm -rf /usr/local/share/boost + echo "Deleting libraries for Android (12G), CodeQL (5.3G), PowerShell (1.3G), Swift (1.7G) ..." + sudo rm -rf /usr/local/lib/android + sudo rm -rf "${AGENT_TOOLSDIRECTORY}/CodeQL" + sudo rm -rf /usr/local/share/powershell + sudo rm -rf /usr/share/swift + # ref: https://github.com/jlumbroso/free-disk-space/blob/main/action.yml + echo "Deleting some larger apt packages:" + sudo apt-get remove -y azure-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri --fix-missing || echo "::warning::The command [sudo apt-get remove -y azure-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri --fix-missing] failed to complete successfully. Proceeding..." + echo "Disk usage after cleanup:" + df -h + + - name: "Prune docker images" + shell: bash + run: | + echo "Pruning docker images ..." + docker image prune -a -f + docker system df + echo "Disk usage after pruning docker images:" + df -h diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..01b16f046 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,128 @@ +name: "Build" + +on: + workflow_dispatch: + + push: + branches: + - main + paths-ignore: + - "**.md" + - "proto/**" + + pull_request: + branches: + - main + paths-ignore: + - "**.md" + - "proto/**" + +defaults: + run: + shell: bash + +env: + SERVER_IMAGE: "quay.io/wxpe/tgis-vllm" + IMAGE_REGISTRY: "quay.io" + +jobs: + build: + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + env: + CACHE_IMAGE: "ghcr.io/ibm/tgis-vllm:build-cache" + CACHE_REGISTRY: "ghcr.io" + CACHE_PACKAGE_NAME: "tgis-vllm" + + steps: + - name: "Checkout" + uses: actions/checkout@v4 + + - name: "Free up disk space" + uses: ./.github/actions/free-up-disk-space + + - name: "Set up QEMU" + uses: docker/setup-qemu-action@v3 + + - name: "Set up Docker Buildx" + uses: docker/setup-buildx-action@v3 + + - name: "Log in to container registry (server-release)" + uses: docker/login-action@v3 + if: github.event_name != 'pull_request' + with: + registry: ${{ env.IMAGE_REGISTRY }} + username: ${{ secrets.WXPE_QUAY_USER }} + password: ${{ secrets.WXPE_QUAY_TOKEN }} + + - name: "Log in to container registry (cache image)" + uses: docker/login-action@v3 + if: github.event_name != 'pull_request' + with: + registry: ${{ env.CACHE_REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: "Set build cache target" + run: | + # For push to `main` (PR merged), push a new cache image with all layers (cache-mode=max). + # For PR builds, use GitHub action cache which isolates cached layers by PR/branch. + # to optimize builds for subsequent pushes to the same PR/branch. + # Do not set a cache-to image for PR builds to not overwrite the `main` cache image and + # to not ping-pong cache images for two or more different PRs. + # Do not push cache images for each PR or multiple branches to not exceed GitHub package + # usage and traffic limitations. + # UPDATE 2024/02/26: GHA cache appears to have issues, cannot use `cache-to: gha,mode=min` + # if `cache-from: reg...,mode=max` but `cache-to: gha,mode=max` takes longer than uncached + # build and exhausts GHA cache size limits, so use cache `type=inline` (no external cache). + if [ "${{ github.event_name }}" == "pull_request" ] + then + #CACHE_TO="type=gha,mode=min" + CACHE_TO="type=inline" + else + CACHE_TO="type=registry,ref=${{ env.CACHE_IMAGE }},mode=max" + fi + echo "CACHE_TO=$CACHE_TO" >> $GITHUB_ENV + + - name: "Generate tags" + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.SERVER_IMAGE }} + tags: | + type=ref,event=branch + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=sha,enable=true,priority=100,prefix=,suffix=,format=short + type=sha,enable=true,priority=100,prefix=${{ github.ref_name }}.,suffix=,format=short + + - name: "UBI Docker build" + uses: docker/build-push-action@v5 + with: + context: . + target: vllm-openai + tags: ${{ steps.meta.outputs.tags }} + cache-from: type=registry,ref=${{ env.CACHE_IMAGE }} + cache-to: ${{ env.CACHE_TO }} + push: ${{ github.event_name != 'pull_request' }} + file: Dockerfile.ubi + + - name: "Cleanup old cache images" + uses: actions/delete-package-versions@v5 + if: ${{ github.event_name == 'push' }} + with: + package-name: ${{ env.CACHE_PACKAGE_NAME }} + package-type: container + delete-only-untagged-versions: true + + - name: "List docker images" + run: docker images + + - name: "Check disk usage" + shell: bash + run: | + docker system df + df -h