Skip to content

scss-to-css (Node) v1.10.2 #96

scss-to-css (Node) v1.10.2

scss-to-css (Node) v1.10.2 #96

name: Sync new releases to adamlui/<app-repo>
on:
release:
types: [published]
jobs:
sync-new-release:
name: Sync new releases to adamlui/<app-repo>
runs-on: ubuntu-latest
steps:
- name: Sync new releases to adamlui/<app-repo>
run: |
# Get latest release title/tag/notes
latest_release=$(curl -s https://api.github.com/repos/adamlui/js-utils/releases/latest)
release_title=$(echo "$latest_release" | sed -nE '0,/.*"name": "(.*)".*/s||\1|p')
release_app_name=$(echo "$release_title" | sed -E 's|^ *|| ; s| [(v].*||')
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|js-utils(/compare/)(.+)-([^-]+)-([0-9.]+)\.\.\.([^0-9]+)|\2\1\3-v\4...\3-v|g" | # replace tags in compare URL
sed -E "s|js-utils(/tree/)(.+)-([^-]+)-([0-9.]+)/[^/]+/(.*)|\2\1\3-v\4/\5|g") # replace tag in README URL
echo "Release Title: $release_title"
echo "Release Tag: $release_tag_name"
# Check for multi-repo existence
app_repos=("minify.js" "scss-to-css")
for repo in "${app_repos[@]}" ; do
if [[ "$release_tag_name" == "$repo"* ]] ; then repo_exists=true ; break ; fi ; done
if [ ! -v repo_exists ] ; then
echo "No multi-repo for $release_app_name exists. Exiting..." ; exit 0 ; fi
# Check for release existence in target repo
target_release_tag_name=$(echo $release_tag_name | sed -E 's|.*-([^-]+)-([0-9.]+)|\1-v\2|')
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/$release_app_name/releases/tags/$target_release_tag_name)
if [ "$response_code" -eq 200 ] ; then
echo "Release already exists @ adamlui/$release_app_name. 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/$release_app_name/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/$release_app_name tagged $target_release_tag_name"