diff --git a/.github/workflows/manual-freeze-images.yml b/.github/workflows/manual-freeze-images.yml new file mode 100644 index 000000000..2df3b1978 --- /dev/null +++ b/.github/workflows/manual-freeze-images.yml @@ -0,0 +1,43 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +name: Freeze base images and 3rd part images on manual event + +on: + workflow_dispatch: + +jobs: + freeze-images: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.ref }} + + - name: install skopeo + run: | + sudo apt update + sudo apt -y install skopeo + + - uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Set up Git + run: | + git config --global user.name "NeuralChatBot" + git config --global user.email "grp_neural_chat_bot@intel.com" + git remote set-url origin https://NeuralChatBot:"${{ secrets.ACTION_TOKEN }}"@github.com/opea-project/GenAIComps.git + + - name: Run script + run: | + bash .github/workflows/scripts/freeze_images.sh + + - name: Commit changes + run: | + git add . + git commit -s -m "Freeze base images tag" + git push diff --git a/.github/workflows/scripts/freeze_images.sh b/.github/workflows/scripts/freeze_images.sh new file mode 100644 index 000000000..72624413e --- /dev/null +++ b/.github/workflows/scripts/freeze_images.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +declare -A dict +dict["langchain/langchain"]="docker://docker.io/langchain/langchain" +dict["vault.habana.ai/gaudi-docker/1.16.1/ubuntu22.04/habanalabs/pytorch-installer-2.2.2"]="docker://vault.habana.ai/gaudi-docker/1.16.1/ubuntu22.04/habanalabs/pytorch-installer-2.2.2" +dict["vault.habana.ai/gaudi-docker/1.16.0/ubuntu22.04/habanalabs/pytorch-installer-2.2.2"]="docker://vault.habana.ai/gaudi-docker/1.16.0/ubuntu22.04/habanalabs/pytorch-installer-2.2.2" + +function get_latest_version() { + repo_image=$1 + versions=$(skopeo list-tags ${dict[$repo_image]} | jq -r '.Tags[]') + printf "version list:\n$versions\n" + latest_version=$(printf "%s\n" "${versions[@]}" | grep -E '^[\.0-9\-]+$' | sort -V | tail -n 1) + echo "latest version: $latest_version" + replace_image_version $repo_image $latest_version +} + +function replace_image_version() { + repo_image=$1 + version=$2 + if [[ -z "$version" ]]; then + echo "version is empty" + else + echo "replace $repo_image:latest with $repo_image:$version" + find . -name "Dockerfile*" | xargs sed -i "s|$repo_image:latest.*|$repo_image:$version|g" + find . -name "*.yaml" | xargs sed -i "s|$repo_image:latest[A-Za-z0-9\-]*|$repo_image:$version|g" + find . -name "*.md" | xargs sed -i "s|$repo_image:latest[A-Za-z0-9\-]*|$repo_image:$version|g" + fi +} + +function check_branch_name() { + if [[ "$GITHUB_REF_NAME" == "main" ]]; then + echo "$GITHUB_REF_NAME is protected branch" + exit 0 + else + echo "branch name is $GITHUB_REF_NAME" + fi +} + +function main() { + check_branch_name + for repo_image in "${!dict[@]}"; do + echo "::group::check $repo_image" + get_latest_version $repo_image + echo "::endgroup::" + done +} + +main