Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 143 additions & 0 deletions .github/workflows/create_update_release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
name: Create and Update Releases

on:
push:
branches:
- main

jobs:
get-release:
runs-on: ubuntu-latest
outputs:
latest_release: ${{ steps.get_latest_release.outputs.latest_release }}
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Get the latest release tag
id: get_latest_release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
LATEST_RELEASE=$(gh release list --limit 1 --json tagName --jq '.[0].tagName' || echo "none")
echo "Latest release tag: $LATEST_RELEASE"
echo "::set-output name=latest_release::$LATEST_RELEASE"
echo "latest_release=${latest_release}" >> $GITHUB_ENV
continue-on-error: true

create-release:
needs: get-release
runs-on: ubuntu-latest
if: needs.get-release.outputs.latest_release == ''
steps:
- name: print latest release output
run: echo "Latest release ${{ needs.get-release.outputs.latest_release }}"

- name: Checkout repository
uses: actions/checkout@v3

- name: Release doesn't exist so create one
id: create_release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create v1.0.0 --generate-notes --prerelease=false
echo "Release created"

- name: Zip files of folders
id: zip_folders
run: |
mkdir -p temp
for folder in */; do
if [ -d "$folder" ]; then
folder_name=$(basename "$folder")
zip -r "temp/${folder_name}.zip" "$folder_name"
fi
done
echo "Zip files created"

- name: upload files to the release
id: upload_files
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
for file in temp/*.zip; do
gh release upload v1.0.0 "$file" --clobber
echo "Uploaded $file, waiting to avoid rate limits..."
sleep 3
done

- name: clean up
run: |
rm -r temp

update-release:
needs: get-release
runs-on: ubuntu-latest
if: needs.get-release.outputs.latest_release != ''
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Fetch latest tags
run: |
git fetch --tags

- name: Get changed files
id: get_changes
run: |
if [ -n "${{ needs.get-release.outputs.latest_release }}" ]; then
git fetch origin refs/tags/${{ needs.get-release.outputs.latest_release }}:refs/tags/${{ needs.get-release.outputs.latest_release }}
changed_files=$(git diff --name-only ${{ needs.get-release.outputs.latest_release }} HEAD)
echo "Changed files: $changed_files"
echo "$changed_files" > changed_files.txt
else
echo "No latest release found"
echo "" > changed_files.txt
fi

- name: Identify changed folders
id: identify_folders
run: |
if [ -s changed_files.txt ]; then
changed_folders=$(awk -F/ '{print $1}' changed_files.txt | sort | uniq)
echo "Changed folders: $changed_folders"
echo "$changed_folders" > changed_folders.txt
else
echo "No changed files"
echo "" > changed_folders.txt
fi

- name: Archive changed folders
run: |
mkdir -p temp_archives
while IFS= read -r folder; do
if [ -d "$folder" ]; then
zip -r "temp_archives/$folder.zip" "$folder"
echo "Archived $folder"
else
echo "Folder $folder does not exist"
fi
done < changed_folders.txt

- name: Upload archives to release
if: needs.get-release.outputs.latest_release != ''
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
while IFS= read -r folder; do
archive="temp_archives/$folder.zip"
if [ -f "$archive" ]; then
gh release upload ${{ needs.get-release.outputs.latest_release }} "$archive" --clobber
echo "Uploaded $archive, waiting to avoid rate limits..."
else
echo "Archive $archive not found"
fi
done < changed_folders.txt

- name: Clean up

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a bit confused, I believe Github Actions uses ephemeral storage. Is there a specific reason we clean up here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, GitHub Actions uses virtual machines that get disposed completely once the process is done. I added clean up here for good practice. This could be removed and it won't make any difference.

if: (needs.get-release.outputs.latest_release != '') && ( steps. )
run: |
rm -r temp_archives
rm changed_folders.txt
rm changed_files.txt