Skip to content

Sync and Update AWS Libraries #3012

Sync and Update AWS Libraries

Sync and Update AWS Libraries #3012

name: Sync and Update AWS Libraries
on:
schedule:
- cron: '0 * * * *' # Run every hour
workflow_dispatch:
jobs:
update-library:
runs-on: ubuntu-latest
strategy:
matrix:
library: ["aws_c_auth","aws_c_cal","aws_c_common","aws_c_compression","aws_c_event_stream","aws_c_http","aws_c_io","aws_c_iot","aws_c_mqtt","aws_c_s3","aws_c_sdkutils","aws_checksums","aws_lc","s2n_tls"]
steps:
- name: Checkout JuliaPackaging/Yggdrasil repository
uses: actions/checkout@v4
with:
ref: master
repository: JuliaPackaging/Yggdrasil
token: ${{ secrets.PAT }}
- name: Check latest release version
run: |
LIBRARY=${{ matrix.library }}
if [[ "$LIBRARY" == "s2n_tls" ]]; then
OWNER="aws"
else
OWNER="awslabs"
fi
REPO="$OWNER/$(echo "$LIBRARY" | tr '_' '-')" # Replace '_' with '-'
echo "REPO=$REPO"
# Get the tags
RELEASES=$(curl --retry 5 -L -H "Authorization: token ${{ secrets.PAT }}" https://api.github.com/repos/${REPO}/git/refs/tags)
echo "RELEASES=$RELEASES"
# Parse and sort the versions to get the highest version
LATEST_VERSION=$(echo $RELEASES | jq -r '.[] | select(.ref | test("refs/tags/v")) | .ref' | sed 's/refs\/tags\/v//' | sort -V | tail -n 1)
LATEST_SHA=$(echo $RELEASES | jq -r --arg LATEST_VERSION "refs/tags/v$LATEST_VERSION" '.[] | select(.ref == $LATEST_VERSION) | .object.sha')
echo "LATEST_VERSION=${LATEST_VERSION}" >> $GITHUB_ENV
echo "LATEST_SHA=$LATEST_SHA" >> $GITHUB_ENV
echo "LATEST_VERSION=$LATEST_VERSION, LATEST_SHA=$LATEST_SHA"
- name: Parse current version and sha in build_tarballs.jl
run: |
LIBRARY=${{ matrix.library }}
LIBRARY_DIR=$(echo "${LIBRARY:0:1}" | tr '[:lower:]' '[:upper:]')/${LIBRARY}
CURRENT_VERSION=$(grep -oP -m 1 '(?<=version = v")[^"]+' $LIBRARY_DIR/build_tarballs.jl | sed 's/^v//')
echo "CURRENT_VERSION=${CURRENT_VERSION}" >> $GITHUB_ENV
echo "CURRENT_VERSION=${CURRENT_VERSION}"
if [[ "$LIBRARY" == "s2n_tls" ]]; then
OWNER="aws"
else
OWNER="awslabs"
fi
REPO="$OWNER/$(echo "$LIBRARY" | tr '_' '-')" # Replace '_' with '-'
CURRENT_SHA=$(grep -oP -m 1 '(?<=GitSource\("https://github.com/'${REPO//\//\\/}'.git", ")[a-f0-9]{40}' $LIBRARY_DIR/build_tarballs.jl)
echo "CURRENT_SHA=${CURRENT_SHA}" >> $GITHUB_ENV
echo "CURRENT_SHA=${CURRENT_SHA}"
- name: Compare versions and update if necessary
if: env.LATEST_VERSION != env.CURRENT_VERSION
run: |
LIBRARY=${{ matrix.library }}
LIBRARY_DIR=$(echo "${LIBRARY:0:1}" | tr '[:lower:]' '[:upper:]')/${LIBRARY}
if [[ "$LIBRARY" == "s2n_tls" ]]; then
OWNER="aws"
else
OWNER="awslabs"
fi
REPO="$OWNER/$(echo "$LIBRARY" | tr '_' '-')" # Replace '_' with '-'
sed -i "s/version = v\"${CURRENT_VERSION}\"/version = v\"${LATEST_VERSION}\"/" $LIBRARY_DIR/build_tarballs.jl
sed -i "s#${CURRENT_SHA}#${LATEST_SHA}#" $LIBRARY_DIR/build_tarballs.jl
git config --global user.name 'github-actions'
git config --global user.email '[email protected]'
git checkout -b update-versions-$LIBRARY-${LATEST_VERSION}
git add .
git commit -m "[$LIBRARY] Update to ${LATEST_VERSION}"
git push https://github.com/quinnj2/Yggdrasil update-versions-$LIBRARY-${LATEST_VERSION}
- name: Checkout fork
uses: actions/checkout@v4
if: env.LATEST_VERSION != env.CURRENT_VERSION
with:
ref: update-versions-${{ matrix.library }}-${{ env.LATEST_VERSION }}
repository: quinnj2/Yggdrasil
token: ${{ secrets.PAT }}
- name: Create a PR
if: env.LATEST_VERSION != env.CURRENT_VERSION
env:
GH_TOKEN: ${{ secrets.PAT }}
run: |
gh pr create --title "[${{ matrix.library }}] Update to version ${LATEST_VERSION}" \
--body "This PR updates ${{ matrix.library }} to version ${LATEST_VERSION}. cc: @quinnj @Octogonapus" \
--repo JuliaPackaging/Yggdrasil --base master