mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2024-11-21 16:38:36 -06:00
297 lines
12 KiB
YAML
297 lines
12 KiB
YAML
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 * * MON'
|
|
|
|
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: crowdin action
|
|
uses: crowdin/github-action@v2
|
|
with:
|
|
upload_sources: true
|
|
download_translations: true
|
|
push_translations: false
|
|
push_sources: false
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
CROWDIN_PROJECT_NR: ${{ secrets.CROWDIN_PROJECT_NR }}
|
|
CROWDIN_TOKEN: ${{ secrets.CROWDIN_TOKEN }}
|
|
- name: Cleanup translations
|
|
id: cleanup-transactions
|
|
uses: JC5/firefly-iii-dev@main
|
|
with:
|
|
action: 'ff3:crowdin-warning'
|
|
output: ''
|
|
env:
|
|
FIREFLY_III_ROOT: /github/workspace
|
|
GH_TOKEN: ''
|
|
- 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: "Create THANKS.md"
|
|
id: thank-you
|
|
uses: JC5/firefly-iii-dev@main
|
|
with:
|
|
action: 'ff3:thank-you'
|
|
output: ''
|
|
env:
|
|
FIREFLY_III_ROOT: /github/workspace
|
|
GH_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: Generate JSON v1
|
|
id: json-v1
|
|
uses: JC5/firefly-iii-dev@main
|
|
with:
|
|
action: 'ff3:json-translations v1'
|
|
output: ''
|
|
env:
|
|
FIREFLY_III_ROOT: /github/workspace
|
|
GH_TOKEN: ''
|
|
- name: Generate JSON v2
|
|
id: json-v2
|
|
uses: JC5/firefly-iii-dev@main
|
|
with:
|
|
action: 'ff3:json-translations v2'
|
|
output: ''
|
|
env:
|
|
FIREFLY_III_ROOT: /github/workspace
|
|
GH_TOKEN: ''
|
|
- 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 run prod --workspace=v1
|
|
npm run build --workspace=v2
|
|
npm update
|
|
- 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=FireflyIII-$version.zip
|
|
tarName=FireflyIII-$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=FireflyIII-develop.zip
|
|
tarName=FireflyIII-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 "Bi-weekly development release of Firefly III 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/firefly-iii/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/firefly-iii/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/installation/self-managed/)" >> output.txt
|
|
echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/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/firefly-iii/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/firefly-iii/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/installation/self-managed/)" >> output.txt
|
|
echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/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 }}
|