-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add an automated CI workflow to sync ODH-notebooks with latest codefl…
…are-sdk release
- Loading branch information
1 parent
90c45b8
commit de6cdd5
Showing
2 changed files
with
140 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters