Sync new releases to adamlui/js-utils #28
Workflow file for this run
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
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" |