Skip to content

Commit

Permalink
add an automated CI workflow to sync ODH-notebooks with latest codefl…
Browse files Browse the repository at this point in the history
…are-sdk release
  • Loading branch information
abhijeet-dhumal authored and openshift-merge-bot[bot] committed Feb 28, 2024
1 parent 90c45b8 commit de6cdd5
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 0 deletions.
128 changes: 128 additions & 0 deletions .github/workflows/odh-notebooks-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# The aim of this GitHub workflow is to update the pipfile to sync with Codeflare-SDK release.
name: Sync ODH-notebooks with codeflare-sdk release
on:
workflow_dispatch:
inputs:
upstream-repository-organization:
required: true
description: "Owner of target upstream notebooks repository used to open a PR against"
default: "opendatahub-io"

codeflare-repository-organization:
required: true
description: "Owner of origin notebooks repository used to open a PR"
default: "project-codeflare"

codeflare_sdk_release_version:
required: true
description: "Provide version of the Codeflare-SDK release"

env:
BRANCH_NAME: main
CODEFLARE_RELEASE_VERSION: ${{ github.event.inputs.codeflare_sdk_release_version }}
UPDATER_BRANCH: odh-sync-updater-${{ github.run_id }}
UPSTREAM_OWNER: ${{ github.event.inputs.upstream-repository-organization }}
REPO_OWNER: ${{ github.event.inputs.codeflare-repository-organization }}
REPO_NAME: notebooks
GITHUB_TOKEN: ${{ secrets.CODEFLARE_MACHINE_ACCOUNT_TOKEN }}

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Clone repository and Sync
run: |
git clone https://x-access-token:${GITHUB_TOKEN}@github.com/$REPO_OWNER/$REPO_NAME.git $REPO_NAME
cd $REPO_NAME
git remote add upstream https://github.com/$UPSTREAM_OWNER/$REPO_NAME.git
git config --global user.email "[email protected]"
git config --global user.name "codeflare-machine-account"
git remote -v
git pull upstream main && git push origin main
- name: Setup Python environment
uses: actions/setup-python@v4
with:
python-version: |
3.8
3.9
- name: Install pipenv and pip-versions
run: pip install pipenv pip-versions

- name: Update Pipfiles in accordance with Codeflare-SDK latest release
run: |
package_name=codeflare-sdk
# Get the list of available versions for the package
if ! versions=$(pipenv run pip-versions list $package_name);then
echo "Failed to retrieve versions for $package_name"
exit 1
fi
# Check if the desired version exists in the list
if echo "$versions" | grep -q "${CODEFLARE_RELEASE_VERSION}"; then
echo "Version ${CODEFLARE_RELEASE_VERSION} is available for $package_name"
# list all Pipfile paths having Codeflare-SDK listed
paths+=($(grep -rl "${package_name} = \"~=.*\""))
# Extracting only directories from file paths, excluding a `.gitworkflow` directory
directories=()
exclude_directories=(
".git/objects/pack"
".github/workflows/",
)
for path in "${paths[@]}"; do
current_dir=$(dirname "$path")
#Check if current_dir is not in exclude_directories list
if [[ ! "${exclude_directories[@]}" =~ "$current_dir" ]]; then
#Check if Pipfile exists in current_dir
if [ -f "$current_dir/Pipfile" ];then
directories+=("$current_dir")
fi
fi
done
# Remove duplicates
directories=($(echo "${directories[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))
# Print the directories for verification
echo "Directories (Start updating Pipfile in these below directories in accordance with Codeflare-SDK latest release):"
for dir in "${directories[@]}"; do
echo "- $dir"
done
# iterate over the directories and update Pipfile
counter=0
total=${#directories[@]}
for dir in "${directories[@]}"; do
counter=$((counter+1))
echo "--Processing directory $counter '$dir' of total $total"
cd "$dir" && pipenv install ${package_name}~="${CODEFLARE_RELEASE_VERSION}" && pipenv --rm && cd -
echo "$((total-counter)) directories remaining.."
done
else
versions_list=$(echo "$versions" | tr '\n' ' ' | sed 's/, $//')
versions="${versions_list%,}"
echo "Version '${CODEFLARE_RELEASE_VERSION}' is not available for $package_name"
echo "Available versions for $package_name: $versions"
exit 1
fi
- name: Push changes
run: |
cd $REPO_NAME
git add . && git status && git checkout -b ${{ env.UPDATER_BRANCH }} && \
git commit -am "Updated notebooks via ${{ env.UPDATER_BRANCH }} GitHub action" --signoff &&
git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/$REPO_OWNER/$REPO_NAME.git
git push origin ${{ env.UPDATER_BRANCH }}
- name: Create Pull Request
run: |
gh pr create --repo $UPSTREAM_OWNER/$REPO_NAME \
--title "$pr_title" \
--body "$pr_body" \
--head $REPO_OWNER:$UPDATER_BRANCH \
--base $BRANCH_NAME
env:
pr_title: "[Digest Updater Action] Update notebook's pipfile to sync with Codeflare-SDK release"
pr_body: |
:rocket: This is an automated Pull Request.
This PR updates the `Pipfile` to sync with latest Codeflare-SDK release.
:exclamation: **IMPORTANT NOTE**: Remember to delete the ` ${{ env.UPDATER_BRANCH }}` branch after merging the changes
12 changes: 12 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,15 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.CODEFLARE_MACHINE_ACCOUNT_TOKEN }}
shell: bash

- name: Sync ODH Notebooks
run: |
gh workflow run odh-notebooks-sync.yml \
--repo ${{ github.event.inputs.codeflare-repository-organization }}/codeflare-sdk \
--ref ${{ github.ref }} \
--field upstream-repository-organization=opendatahub-io
--field codeflare-repository-organization=${{ github.event.inputs.codeflare-repository-organization }} \
--field codeflare_sdk_release_version=${{ github.event.inputs.release-version }}
env:
GITHUB_TOKEN: ${{ secrets.CODEFLARE_MACHINE_ACCOUNT_TOKEN }}
shell: bash

0 comments on commit de6cdd5

Please sign in to comment.