Merge branch 'main' into develop #4348
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: Flutter build | |
on: [push, release, pull_request] | |
jobs: | |
build-apk: | |
concurrency: ci-${{ github.ref }} | |
defaults: | |
run: | |
working-directory: app | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: ⬆️ Checkout | |
uses: actions/checkout@v4 | |
- name: 🔧 Setup java | |
uses: actions/setup-java@v4 | |
with: | |
java-version: "17" | |
distribution: "adopt" | |
- name: Get flutter version | |
run: | | |
FLUTTER_VERSION=$(cat ../FLUTTER_VERSION) | |
echo "FLUTTER_VERSION=${FLUTTER_VERSION}" >> $GITHUB_ENV | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: 'master' | |
- name: 📦 Get dependencies | |
run: | | |
flutter clean | |
flutter pub get | |
flutter doctor -v | |
- name: Import files | |
if: ${{ github.event_name != 'pull_request' }} | |
env: | |
KEY_JKS: ${{ secrets.KEY_JKS }} | |
KEY_PROPERTIES: ${{ secrets.KEY_PROPERTIES }} | |
run: | | |
cd android | |
if [[ -n "$KEY_PROPERTIES" ]] ; then echo "$KEY_PROPERTIES" | base64 --decode > key.properties ; fi | |
if [[ -n "$KEY_JKS" ]] ; then echo "$KEY_JKS" | base64 --decode > key.jks ; fi | |
#- run: flutter test | |
- name: 🏭 Build nightly | |
if: ${{ github.ref != 'refs/tags/stable' }} | |
run: | | |
flutter build apk -v --release --flavor development --dart-define=flavor=development | |
cp build/app/outputs/flutter-apk/app-development-release.apk linwood-butterfly-android.apk | |
- name: 🏭 Build production | |
if: ${{ github.ref == 'refs/tags/stable' }} | |
run: | | |
flutter build apk -v --release --flavor production | |
cp build/app/outputs/flutter-apk/app-production-release.apk linwood-butterfly-android.apk | |
- name: Archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: apk-build | |
path: app/linwood-butterfly-android.apk | |
build-windows: | |
runs-on: windows-2022 | |
defaults: | |
run: | |
working-directory: app | |
steps: | |
- name: ⬆️ Checkout | |
uses: actions/checkout@v4 | |
- name: Get flutter version | |
shell: bash | |
run: | | |
FLUTTER_VERSION=$(cat ../FLUTTER_VERSION) | |
echo "FLUTTER_VERSION=${FLUTTER_VERSION}" >> $GITHUB_ENV | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: 'master' | |
- name: ✅ Enable platforms | |
run: flutter config --enable-windows-desktop | |
- name: 📦 Get dependencies | |
run: | | |
flutter clean | |
flutter pub get | |
flutter doctor -v | |
- name: 🏭 Build nightly | |
if: ${{ github.ref != 'refs/tags/stable' }} | |
run: | | |
flutter doctor -v | |
flutter build windows -v --release --dart-define=flavor=development | |
- name: 🏭 Build production | |
if: ${{ github.ref == 'refs/tags/stable' }} | |
run: | | |
flutter doctor -v | |
flutter build windows -v --release --dart-define=flavor=production | |
- name: Build setup | |
shell: pwsh | |
run: | | |
Get-Content pubspec.yaml | Select-String -Pattern 'version:\s(.+)\+' | % {Set-Item -Path Env:BUTTERFLY_VERSION -Value "$($_.matches.groups[1])"} | |
& 'C:/Program Files (x86)/Inno Setup 6/ISCC.exe' /DMyAppVersion=$Env:BUTTERFLY_VERSION ButterflySetup.iss | |
# flutter pub run msix:create | |
- name: Copy portable start script | |
run: | | |
cp scripts/start.bat build/windows/x64/runner/Release/ | |
- name: Archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: windows-build | |
path: | | |
app/build/windows/x64/runner/Release/** | |
- name: Archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: windows-setup | |
path: | | |
app/build/windows/linwood-butterfly-windows-setup.exe | |
build-linux: | |
runs-on: ubuntu-22.04 | |
defaults: | |
run: | |
working-directory: app | |
steps: | |
- name: ⬆️ Checkout | |
uses: actions/checkout@v4 | |
- name: Get dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y python3-pip \ | |
python3-setuptools \ | |
desktop-file-utils \ | |
libgdk-pixbuf2.0-dev \ | |
fakeroot \ | |
strace \ | |
fuse \ | |
libgtk-3-dev \ | |
libx11-dev \ | |
pkg-config \ | |
cmake \ | |
ninja-build \ | |
libblkid-dev \ | |
liblzma-dev \ | |
clang \ | |
dpkg-dev \ | |
patchelf \ | |
alien \ | |
libsecret-1-dev \ | |
libjsoncpp-dev \ | |
rpm | |
- name: Get flutter version | |
run: | | |
FLUTTER_VERSION=$(cat ../FLUTTER_VERSION) | |
echo "FLUTTER_VERSION=${FLUTTER_VERSION}" >> $GITHUB_ENV | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: 'master' | |
- name: ✅ Enable platforms | |
run: flutter config --enable-linux-desktop | |
- name: 📦 Get dependencies | |
run: | | |
flutter clean | |
flutter pub get | |
flutter doctor -v | |
- name: 🏭 Build nightly | |
if: ${{ github.ref != 'refs/tags/stable' }} | |
run: | | |
flutter doctor -v | |
flutter build linux -v --release --dart-define=flavor=development | |
- name: 🏭 Build production | |
if: ${{ github.ref == 'refs/tags/stable' }} | |
run: | | |
flutter doctor -v | |
flutter build linux -v --release --dart-define=flavor=production | |
- name: 🏭 Make binary executable | |
run: | | |
chmod +x build/linux/x64/release/bundle/butterfly | |
- name: Build .deb executable | |
run: | | |
cp -fr build/linux/x64/release/bundle linux/debian/usr/bin | |
dpkg-deb --build --root-owner-group linux/debian | |
cp linux/*.deb linwood-butterfly-linux.deb | |
- name: Build .rpm executable | |
run: | | |
bash scripts/build-rpm.sh | |
- name: Build .AppImage executable | |
run: | | |
wget -O appimage-builder-x86_64.AppImage https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage | |
chmod +x appimage-builder-x86_64.AppImage | |
sudo mv appimage-builder-x86_64.AppImage /usr/local/bin/appimage-builder | |
appimage-builder --recipe AppImageBuilder.yml --skip-test | |
- name: Copy nessessary files | |
run: | | |
cp images/logo.svg build/linux/x64/release/bundle/dev.linwood.butterfly.svg | |
mkdir -p build/linux/x64/release/bundle/usr/share | |
cp -r linux/debian/usr/share build/linux/x64/release/bundle/usr | |
- name: Rename AppImage | |
run: | | |
ls | |
mv ./*.AppImage linwood-butterfly-linux.AppImage | |
- name: Copy portable start script | |
run: | | |
chmod +x scripts/start.sh | |
cp scripts/start.sh build/linux/x64/release/bundle | |
- name: Archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-build | |
path: | | |
app/build/linux/x64/release/bundle/** | |
- name: Archive .deb | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-deb | |
path: | | |
app/linwood-butterfly-linux.deb | |
- name: Archive .rpm | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-rpm | |
path: | | |
app/build/linwood-butterfly-linux.rpm | |
- name: Archive .AppImage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-appimage | |
path: | | |
app/linwood-butterfly-linux.AppImage | |
build-flatpak: | |
name: Build flatpak | |
runs-on: ubuntu-20.04 | |
defaults: | |
run: | |
working-directory: app | |
steps: | |
- name: ⬆️ Checkout | |
uses: actions/checkout@v4 | |
- name: Get dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y python3-pip \ | |
python3-setuptools \ | |
desktop-file-utils \ | |
libgdk-pixbuf2.0-dev \ | |
fakeroot \ | |
strace \ | |
fuse \ | |
libgtk-3-dev \ | |
libx11-dev \ | |
pkg-config \ | |
cmake \ | |
ninja-build \ | |
libblkid-dev \ | |
liblzma-dev \ | |
clang \ | |
dpkg-dev \ | |
patchelf \ | |
alien \ | |
libsecret-1-dev \ | |
libjsoncpp-dev | |
- name: Get flutter version | |
run: | | |
FLUTTER_VERSION=$(cat ../FLUTTER_VERSION) | |
echo "FLUTTER_VERSION=${FLUTTER_VERSION}" >> $GITHUB_ENV | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: 'master' | |
- name: ✅ Enable platforms | |
run: flutter config --enable-linux-desktop | |
- name: 📦 Get dependencies | |
run: | | |
flutter clean | |
flutter pub get | |
flutter doctor -v | |
- name: 🏭 Build nightly | |
if: ${{ github.ref != 'refs/tags/stable' }} | |
run: | | |
flutter doctor -v | |
flutter build linux -v --release --dart-define=flavor=development | |
- name: 🏭 Build production | |
if: ${{ github.ref == 'refs/tags/stable' }} | |
run: | | |
flutter doctor -v | |
flutter build linux -v --release --dart-define=flavor=production | |
- name: Copy nessessary files | |
run: | | |
cp images/logo.svg build/linux/x64/release/bundle/dev.linwood.butterfly.svg | |
mkdir -p build/linux/x64/release/bundle/usr/share | |
cp -r linux/debian/usr/share build/linux/x64/release/bundle/usr | |
- name: Compress Flutter build | |
run: tar -C build/linux/x64/release/bundle -czf linwood-butterfly-linux-portable.tar.gz . | |
# - name: Install flatpak | |
# run: | | |
# sudo apt-get update | |
# sudo apt-get install -y flatpak | |
# - name: Install dependencies | |
# run: | | |
# flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo --user | |
# flatpak install flathub org.flatpak.Builder --user -y --arch=x86_64 | |
# - name: Build .flatpak | |
# timeout-minutes: 15 | |
# run: | | |
# flatpak run org.flatpak.Builder -v --force-clean --sandbox --delete-build-dirs --user --install-deps-from=flathub --arch=x86_64 flatpak_app flatpak.json --bundle-sources | |
# flatpak build-export export flatpak_app -v | |
# flatpak build-bundle export linwood-butterfly-linux.flatpak dev.linwood.butterfly -v | |
# - name: Upload .flatpak artifact to workflow | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: linux-flatpak | |
# path: app/linwood-butterfly-linux.flatpak | |
- name: Archive old portable | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-alternative-portable | |
path: app/build/linux/x64/release/bundle | |
build-macos: | |
runs-on: macos-latest | |
defaults: | |
run: | |
working-directory: app | |
steps: | |
- name: ⬆️ Checkout | |
uses: actions/checkout@v4 | |
- name: Get flutter version | |
run: | | |
FLUTTER_VERSION=$(cat ../FLUTTER_VERSION) | |
echo "FLUTTER_VERSION=${FLUTTER_VERSION}" >> $GITHUB_ENV | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: 'master' | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: ✅ Enable platforms | |
run: flutter config --enable-macos-desktop | |
- name: 📦 Get dependencies | |
run: | | |
flutter clean | |
flutter pub get | |
flutter doctor -v | |
- name: 🏭 Build | |
run: | | |
flutter build macos -v --release | |
- name: Zip file | |
working-directory: app/build/macos/Build/Products/Release | |
run: zip --symlinks -qr linwood-butterfly-macos.zip butterfly.app | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '18' | |
- name: Install appdmg | |
run: npm install -g appdmg | |
- name: Create dmg | |
run: | | |
appdmg DmgSetup.json linwood-butterfly-macos.dmg | |
- name: Archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: macos-build | |
path: | | |
app/build/macos/Build/Products/Release/linwood-butterfly-macos.zip | |
- name: Archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: macos-dmg | |
path: | | |
app/linwood-butterfly-macos.dmg | |
# build-snap: | |
# name: Build Snap | |
# runs-on: ubuntu-latest | |
# strategy: | |
# matrix: | |
# architecture: | |
# - amd64 | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - uses: docker/setup-qemu-action@v2 | |
# with: | |
# image: tonistiigi/binfmt@sha256:df15403e06a03c2f461c1f7938b171fda34a5849eb63a70e2a2109ed5a778bde | |
# - uses: diddlesnaps/snapcraft-multiarch-action@v1 | |
# id: build | |
# with: | |
# architecture: ${{ matrix.architecture }} | |
# - uses: actions/upload-artifact@v4 | |
# with: | |
# name: butterfly-snap | |
# path: ${{ steps.build.outputs.snap }} | |
deploy: | |
runs-on: ubuntu-22.04 | |
if: github.event_name == 'push' | |
outputs: | |
version: ${{ steps.setup.outputs.BUTTERFLY_VERSION }} | |
build_number: ${{ steps.setup.outputs.BUTTERFLY_BUILD_NUMBER }} | |
needs: | |
- build-apk | |
- build-windows | |
- build-linux | |
- build-flatpak | |
- build-macos | |
steps: | |
- name: ⬆️ Checkout | |
uses: actions/checkout@v4 | |
env: | |
CI_PAT: ${{ secrets.CI_PAT }} | |
with: | |
token: ${{ env.CI_PAT }} | |
- name: Setup git | |
id: setup | |
run: | | |
BUTTERFLY_VERSION_REGEX="version:\s(.+)\+(.+)" | |
[[ $(grep -E "${BUTTERFLY_VERSION_REGEX}" app/pubspec.yaml) =~ ${BUTTERFLY_VERSION_REGEX} ]] | |
BUTTERFLY_VERSION="${BASH_REMATCH[1]}" | |
echo "BUTTERFLY_VERSION=${BUTTERFLY_VERSION}" >> $GITHUB_ENV | |
echo "BUTTERFLY_VERSION=${BUTTERFLY_VERSION}" >> $GITHUB_OUTPUT | |
BUTTERFLY_BUILD_NUMBER="${BASH_REMATCH[2]}" | |
echo "BUTTERFLY_BUILD_NUMBER=${BUTTERFLY_BUILD_NUMBER}" >> $GITHUB_ENV | |
echo "BUTTERFLY_BUILD_NUMBER=${BUTTERFLY_BUILD_NUMBER}" >> $GITHUB_OUTPUT | |
git config --global user.email "[email protected]" | |
git config --global user.name "Linwood CI" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: apk-build | |
- uses: actions/download-artifact@v4 | |
with: | |
name: windows-build | |
path: windows-build/ | |
- uses: actions/download-artifact@v4 | |
with: | |
name: linux-build | |
path: linux-build/ | |
- uses: actions/download-artifact@v4 | |
with: | |
name: linux-deb | |
- uses: actions/download-artifact@v4 | |
with: | |
name: linux-rpm | |
- uses: actions/download-artifact@v4 | |
with: | |
name: linux-appimage | |
- uses: actions/download-artifact@v4 | |
with: | |
name: linux-alternative-portable | |
path: linux-alternative-portable/ | |
- uses: actions/download-artifact@v4 | |
with: | |
name: windows-setup | |
- uses: actions/download-artifact@v4 | |
with: | |
name: macos-build | |
- uses: actions/download-artifact@v4 | |
with: | |
name: macos-dmg | |
- name: 📦 Zip artifacts | |
run: | | |
zip -r linwood-butterfly-windows.zip windows-build/* | |
tar -C linux-build -czf linwood-butterfly-linux.tar.gz . | |
tar -C linux-alternative-portable -czf linwood-butterfly-linux-alternative.tar.gz . | |
- name: Configure git | |
if: ${{ github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/main' }} | |
run: | | |
git --version | |
git config --global user.email "[email protected]" | |
git config --global user.name "Actions" | |
git pull --tags | |
- name: 🚀 Deploy stable | |
if: ${{ github.ref == 'refs/tags/stable' }} | |
uses: softprops/action-gh-release@v1 | |
continue-on-error: true | |
with: | |
prerelease: true | |
tag_name: stable | |
files: | | |
linwood-butterfly-windows-setup.exe | |
linwood-butterfly-windows.zip | |
linwood-butterfly-android.apk | |
linwood-butterfly-linux.tar.gz | |
linwood-butterfly-linux-alternative.tar.gz | |
linwood-butterfly-linux.deb | |
linwood-butterfly-linux.rpm | |
linwood-butterfly-linux.AppImage | |
linwood-butterfly-macos.zip | |
linwood-butterfly-macos.dmg | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: 🚀 Deploy nightly | |
if: ${{ github.ref == 'refs/tags/nightly' }} | |
uses: softprops/action-gh-release@v1 | |
continue-on-error: true | |
with: | |
prerelease: true | |
tag_name: nightly | |
files: | | |
linwood-butterfly-windows-setup.exe | |
linwood-butterfly-windows.zip | |
linwood-butterfly-android.apk | |
linwood-butterfly-linux.tar.gz | |
linwood-butterfly-linux-alternative.tar.gz | |
linwood-butterfly-linux.deb | |
linwood-butterfly-linux.rpm | |
linwood-butterfly-linux.AppImage | |
linwood-butterfly-macos.zip | |
linwood-butterfly-macos.dmg | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Release | |
uses: softprops/action-gh-release@v1 | |
continue-on-error: true | |
if: startsWith(github.ref, 'refs/tags/v') | |
with: | |
files: | | |
linwood-butterfly-windows-setup.exe | |
linwood-butterfly-windows.zip | |
linwood-butterfly-android.apk | |
linwood-butterfly-linux.tar.gz | |
linwood-butterfly-linux-alternative.tar.gz | |
linwood-butterfly-linux.deb | |
linwood-butterfly-linux.rpm | |
linwood-butterfly-linux.AppImage | |
linwood-butterfly-macos.zip | |
linwood-butterfly-macos.dmg | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
deploy-to-play-store: | |
runs-on: ubuntu-22.04 | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
defaults: | |
run: | |
working-directory: app | |
env: | |
PLAY_STORE_CREDENTIALS: ${{ secrets.PLAY_STORE_CREDENTIALS }} | |
steps: | |
- name: ⬆️ Checkout | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.CI_PAT }} | |
- name: Setup git | |
run: | | |
git config --global user.email "[email protected]" | |
git config --global user.name "Linwood CI" | |
- name: Import files | |
env: | |
KEY_JKS: ${{ secrets.KEY_JKS }} | |
KEY_PROPERTIES: ${{ secrets.KEY_PROPERTIES }} | |
PLAY_STORE_CREDENTIALS: ${{ secrets.PLAY_STORE_CREDENTIALS }} | |
if: ${{ env.PLAY_STORE_CREDENTIALS != '' }} | |
run: | | |
cd android | |
if [[ -n "$KEY_PROPERTIES" ]] ; then echo "$KEY_PROPERTIES" | base64 --decode > key.properties ; fi | |
if [[ -n "$KEY_JKS" ]] ; then echo "$KEY_JKS" | base64 --decode > key.jks ; fi | |
echo "$PLAY_STORE_CREDENTIALS" | base64 --decode > play-store-credentials.json | |
- name: 🔧 Setup java | |
uses: actions/setup-java@v4 | |
with: | |
java-version: "17" | |
distribution: "adopt" | |
- name: Get flutter version | |
run: | | |
FLUTTER_VERSION=$(cat ../FLUTTER_VERSION) | |
echo "FLUTTER_VERSION=${FLUTTER_VERSION}" >> $GITHUB_ENV | |
- uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
channel: 'master' | |
- name: 📦 Get dependencies | |
run: | | |
flutter pub get | |
- name: Setup Fastlane | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "3.3.0" | |
bundler-cache: true | |
working-directory: app/android | |
- name: 🚀 Deploy to Play Store | |
if: ${{ github.ref == 'refs/tags/stable' && env.PLAY_STORE_CREDENTIALS != '' }} | |
env: | |
PLAY_STORE_CREDENTIALS: ${{ secrets.PLAY_STORE_CREDENTIALS }} | |
run: bundle exec fastlane deploy | |
working-directory: app/android | |
- name: 🚀 Deploy to Play Store | |
if: ${{ github.ref == 'refs/tags/nightly' && env.PLAY_STORE_CREDENTIALS != '' }} | |
env: | |
PLAY_STORE_CREDENTIALS: ${{ secrets.PLAY_STORE_CREDENTIALS }} | |
run: bundle exec fastlane beta | |
working-directory: app/android | |
publish-winget: | |
needs: [deploy] | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.CI_PAT }} | |
- if: ${{ github.ref == 'refs/tags/stable' }} | |
uses: vedantmgoyal2009/winget-releaser@v2 | |
with: | |
identifier: LinwoodCloud.Butterfly | |
version: ${{ needs.deploy.outputs.version }} | |
release-tag: v${{ needs.deploy.outputs.version }} | |
token: ${{ secrets.CI_PAT }} | |
- if: ${{ github.ref == 'refs/tags/nightly' }} | |
uses: vedantmgoyal2009/winget-releaser@v2 | |
with: | |
identifier: LinwoodCloud.Butterfly.Nightly | |
version: ${{ needs.deploy.outputs.version }} | |
release-tag: v${{ needs.deploy.outputs.version }} | |
token: ${{ secrets.CI_PAT }} |