Code - Create new release #85
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: 'Code - Create new release' | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: 'Release "v1.2.3" or "develop"' | |
required: true | |
default: 'develop' | |
schedule: | |
- cron: '0 3 * * TUE' | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Switch branch | |
run: | | |
if [[ "develop" == "$version" ]]; then | |
git checkout --track origin/develop | |
git pull | |
else | |
git config user.name github-actions | |
git config user.email 41898282+github-actions[bot]@users.noreply.github.com | |
git checkout --track origin/develop | |
git pull | |
git checkout main | |
git merge develop | |
fi | |
env: | |
version: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: '8.3' | |
extensions: mbstring, intl, zip, bcmath | |
- name: Cleanup changelog | |
id: cleanup-changelog | |
uses: JC5/firefly-iii-dev@main | |
with: | |
action: 'ff3:changelog' | |
output: '' | |
env: | |
FIREFLY_III_ROOT: /github/workspace | |
GH_TOKEN: ${{ secrets.CHANGELOG_TOKEN }} | |
- name: Extract changelog | |
id: extract-changelog | |
uses: JC5/firefly-iii-dev@main | |
with: | |
action: 'ff3:extract-changelog' | |
output: 'output' | |
env: | |
FIREFLY_III_ROOT: /github/workspace | |
GH_TOKEN: "" | |
- name: Replace version | |
id: replace-version | |
uses: JC5/firefly-iii-dev@main | |
with: | |
action: 'ff3:version' | |
output: '' | |
env: | |
FIREFLY_III_ROOT: /github/workspace | |
GH_TOKEN: "" | |
FF_III_VERSION: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} | |
- name: Code cleanup | |
id: code-cleanup | |
uses: JC5/firefly-iii-dev@main | |
with: | |
action: 'ff3:code' | |
output: '' | |
env: | |
FIREFLY_III_ROOT: /github/workspace | |
GH_TOKEN: '' | |
- name: Build JS | |
run: | | |
npm install | |
npm update | |
npm run build --workspace=v2 | |
- name: Run CI | |
run: | | |
rm -rf vendor composer.lock | |
composer update --no-dev --no-scripts --no-plugins -q | |
sudo chown -R runner:docker resources/lang | |
.ci/phpcs.sh | |
- name: Import GPG key | |
uses: crazy-max/ghaction-import-gpg@v6 | |
with: | |
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} | |
passphrase: ${{ secrets.PASSPHRASE }} | |
- name: Release | |
run: | | |
# do some configuration | |
sudo timedatectl set-timezone Europe/Amsterdam | |
git config user.name github-actions | |
git config user.email 41898282+github-actions[bot]@users.noreply.github.com | |
git config advice.addIgnoredFile false | |
# set some variables | |
releaseName=$version | |
originalName=$version | |
zipName=DataImporter-$version.zip | |
tarName=DataImporter-$version.tar.gz | |
# update composer (again) | |
composer update --no-dev --no-scripts --no-plugins | |
composer dump-autoload | |
# if this is a develop build, slightly different variable names. | |
if [[ "develop" == "$version" ]]; then | |
[[ -z $(git status --untracked-files=normal --porcelain) ]] && echo "this branch is clean, no need to push..." && exit 0; | |
releaseName=$version-$(date +'%Y%m%d') | |
originalName=$releaseName | |
zipName=DataImporter-develop.zip | |
tarName=DataImporter-develop.tar.gz | |
fi | |
# in both cases, if the release or tag already exists, add ".1" until it no longer exists. | |
tagFound=true | |
tagCount=1 | |
while [ "$tagFound" = true ] | |
do | |
if [ $(git tag -l "$releaseName") ]; then | |
echo "Tag $releaseName exists already." | |
releaseName="$originalName"."$tagCount" | |
echo "Tag for release is now $releaseName" | |
tagCount=$((tagCount+1)) | |
else | |
echo "Tag $releaseName does not exist, can continue" | |
tagFound=false | |
fi | |
done | |
echo "Will use tag and release name $releaseName." | |
# add all content, except output.txt (this contains the changelog and/or the download instructions) | |
echo 'Add all and reset output.txt' | |
git add -A | |
if test -f "output.txt"; then | |
git reset output.txt | |
fi | |
git commit -m "Auto commit for release '$version' on $(date +'%Y-%m-%d')" || true | |
git push | |
# zip and tar everything | |
echo 'Zip and tar...' | |
zip -rq $zipName . -x "*.git*" "*.ci*" "*.github*" "*node_modules*" "*output.txt*" | |
touch $tarName | |
tar --exclude=$tarName --exclude=$zipName --exclude='./.git' --exclude='./.ci' --exclude='./.github' --exclude='./node_modules' --exclude='./output.txt' -czf $tarName . | |
# add sha256 sum | |
echo 'Sha sum ...' | |
sha256sum -b $zipName > $zipName.sha256 | |
sha256sum -b $tarName > $tarName.sha256 | |
# add signatures: | |
gpg --armor --detach-sign $zipName | |
gpg --armor --detach-sign $tarName | |
# create a development (nightly) release: | |
if [[ "develop" == "$version" ]]; then | |
echo 'Develop release.' | |
# add text to output.txt (instructions) | |
rm output.txt | |
echo "Weekly development release of the Firefly III Data Importer with the latest fixes, translations and features. Docker users can find this release under the \`develop\` tag." >> output.txt | |
echo "" >> output.txt | |
echo "This release was created on **$(date +'%Y-%m-%d')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt | |
echo "" >> output.txt | |
echo "* Please read the installation instructions for [Docker](https://docs.firefly-iii.org/how-to/data-importer/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/data-importer/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/data-importer/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/data-importer/installation/self-managed/)" >> output.txt | |
echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/data-importer/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/data-importer/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/data-importer/upgrade/self-managed/)" >> output.txt | |
echo "" >> output.txt | |
echo ":warning: Please be careful with this pre-release, as it may not work as expected." >> output.txt | |
# create the release: | |
echo "Create nightly release." | |
git tag -a $releaseName -m "Nightly development release '$version' on $(date +'%Y-%m-%d')" | |
git push origin $releaseName | |
gh release create $releaseName -p --verify-tag \ | |
-t "Development release for $(date +'%Y-%m-%d')" \ | |
-F output.txt | |
# add zip file to release. | |
gh release upload $releaseName $zipName | |
gh release upload $releaseName $tarName | |
# add sha256 sum to release | |
gh release upload $releaseName $zipName.sha256 | |
gh release upload $releaseName $tarName.sha256 | |
# add signatures to release | |
gh release upload $releaseName $zipName.asc | |
gh release upload $releaseName $tarName.asc | |
# get current HEAD and add as file to the release | |
HEAD=$(git rev-parse HEAD) | |
echo $HEAD > HEAD.txt | |
gh release upload $releaseName HEAD.txt | |
else | |
echo 'MAIN (real) release' | |
sudo chown -R runner:docker output.txt | |
# add text to output.txt (more instructions) | |
echo '' >> output.txt | |
echo '### Instructions' >> output.txt | |
echo '' >> output.txt | |
echo "* Installation instructions for [Docker](https://docs.firefly-iii.org/how-to/data-importer/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/data-importer/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/data-importer/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/data-importer/installation/self-managed/)" >> output.txt | |
echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/data-importer/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/data-importer/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/data-importer/upgrade/self-managed/)" >> output.txt | |
echo "* The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt | |
echo "Create default release." | |
git tag -a $releaseName -m "Here be changelog" | |
git push origin $releaseName | |
gh release create $releaseName -F output.txt -t "$releaseName" --verify-tag | |
# add archive files to release | |
gh release upload $releaseName $zipName | |
gh release upload $releaseName $tarName | |
# add sha256 sums to release | |
gh release upload $releaseName $zipName.sha256 | |
gh release upload $releaseName $tarName.sha256 | |
# add signatures to release | |
gh release upload $releaseName $zipName.asc | |
gh release upload $releaseName $tarName.asc | |
# get current HEAD and add as file to the release | |
HEAD=$(git rev-parse HEAD) | |
echo $HEAD > HEAD.txt | |
gh release upload $releaseName HEAD.txt | |
# remove all temporary files | |
rm output.txt | |
rm HEAD.txt | |
rm $zipName | |
rm $zipName.sha256 | |
rm $tarName | |
rm $tarName.sha256 | |
# merge main back into develop | |
git checkout develop | |
git merge main | |
git push | |
fi | |
env: | |
GH_TOKEN: ${{ github.token }} | |
version: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} |