Skip to content

Sync new releases to adamlui/js-utils #28

Sync new releases to adamlui/js-utils

Sync new releases to adamlui/js-utils #28

name: Sync new releases to adamlui/js-utils
on:
release:
types: [published]
jobs:
sync-new-release:
name: Sync new releases to adamlui/js-utils
runs-on: ubuntu-latest
steps:
- name: Sync new releases to adamlui/js-utils
run: |
# Get latest release title/tag/notes
latest_release=$(curl -s https://api.github.com/repos/adamlui/minify.js/releases/latest)
release_title=$(echo "$latest_release" | sed -nE '0,/.*"name": "(.*)".*/s||\1|p')
release_tag_name=$(echo "$latest_release" | sed -nE 's|.*"tag_name": "(.*)".*|\1|p')
release_version=$(echo "$release_tag_name" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
release_notes=$(echo "$latest_release" | sed -nE 's/.*"body": "(.*)".*/\1/p' |
sed 's|📃|:page_with_curl:|g; s|🚀|:rocket:|g; s|🧠|:brain:|g' | # replace emojis w/ CLDR short names
sed -E "s|(minify\.js)(/compare/)([^-]+)-v([0-9.]+)\.\.\.([^-]+)-v|js-utils\2\1-\3-\4\.\.\.\1-\3-|g" | # replace tags in compare URL
sed -E "s|(minify\.js)(/tree/)([^-]+)-v([0-9.]+)|js-utils\2\1-\3-\4/\1|g") # replace tag in README URL
echo "Release Title: $release_title"
echo "Release Tag: $release_tag_name"
# Check for release existence in adamlui/js-utils
target_release_tag_name="minify.js-$(echo "$release_tag_name" | sed 's|v||')"
response_code=$(curl -L -s -o /dev/null -w "%{http_code}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/adamlui/js-utils/releases/tags/$target_release_tag_name)
if [ "$response_code" -eq 200 ] ; then
echo "Release already exists @ adamlui/js-utils. Exiting..." ; exit 0 ; fi
# Download assets
download_urls=$(echo "$latest_release" | grep -o '"browser_download_url": ".*"' | cut -d '"' -f 4)
for url in $download_urls; do
echo -e "Downloading $(basename "$url")..."
curl -LOs "$url"
done
# Publish new release
echo "Publishing new release..."
create_release_url="https://api.github.com/repos/adamlui/js-utils/releases"
create_release_payload=$(
printf '{"tag_name": "%s","name": "%s","body": "%s"}' \
"$target_release_tag_name" "$release_title" "$release_notes")
create_release_response=$(
curl -s -S -X POST -H "Authorization: token ${{ secrets.REPO_SYNC_PAT }}" \
-H "Content-Type: application/json" -d "$create_release_payload" "$create_release_url")
# Upload assets to new release
echo "Uploading assets to new release..."
upload_url=$(echo "$create_release_response" | sed -nE 's|.*"upload_url": "(.*)".*|\1|p' |
sed 's|{.*}||') # remove additional params
for url in $download_urls ; do
filename=$(basename "$url")
echo "Uploading $filename..."
curl -s -S --data-binary @"$filename" \
-H "Authorization: token ${{ secrets.REPO_SYNC_PAT }}" \
-H "Content-Type: application/octet-stream" \
"$upload_url?name=$filename" \
> /dev/null 2>&1 # hide verbosity
done
echo "Release duplicated to adamlui/js-utils tagged $target_release_tag_name"