name: Release Workflow on: release: types: - created concurrency: group: release_workflow cancel-in-progress: true env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: build_web: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} cache: true - name: Install dependencies run: sudo apt-get update && sudo apt-get install nodejs -y - name: Remove Emoji Font run: | rm -rf fonts/NotoEmoji yq -i 'del( .flutter.fonts[] | select(.family == "NotoEmoji") )' pubspec.yaml - run: flutter pub get - name: Prepare web run: ./scripts/prepare-web.sh - name: Build Release Web run: flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps --base-href "/web/" - name: Create archive run: tar -czf fluffychat-web.tar.gz build/web/ - name: Upload Web Build uses: actions/upload-artifact@v4 with: name: Web Build path: fluffychat-web.tar.gz - name: Upload to release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.PAGES_DEPLOY_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: fluffychat-web.tar.gz asset_name: fluffychat-web.tar.gz asset_content_type: application/gzip - name: Build Website run: | cd docs && npx tailwindcss -o ./tailwind.css --minify && cd .. mv docs public mv repo public || true mv build/web/ public/web cp public/web -r public/nightly - name: Deploy to GitHub Pages if: startsWith(github.ref, 'refs/tags/v') uses: peaceiris/actions-gh-pages@v4 with: personal_token: ${{ secrets.PAGES_DEPLOY_TOKEN }} publish_dir: ./public publish_branch: gh-pages cname: fluffychat.im build_apk: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: actions/setup-java@v4 with: java-version: ${{ env.JAVA_VERSION }} distribution: 'zulu' - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} cache: true - name: Apply Google Services Patch run: git apply ./scripts/enable-android-google-services.patch - name: Remove Emoji Font run: | rm -rf fonts/NotoEmoji yq -i 'del( .flutter.fonts[] | select(.family == "NotoEmoji") )' pubspec.yaml - run: flutter pub get - name: Prepare Android Release Build env: FDROID_KEY: ${{ secrets.FDROID_KEY }} FDROID_KEY_PASS: ${{ secrets.FDROID_KEY_PASS }} PLAYSTORE_DEPLOY_KEY: ${{ secrets.PLAYSTORE_DEPLOY_KEY }} run: ./scripts/prepare-android-release.sh - run: flutter build apk --release - name: Upload to release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.PAGES_DEPLOY_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: build/app/outputs/apk/release/app-release.apk asset_name: fluffychat.apk asset_content_type: application/vnd.android.package-archive build_linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} cache: true - name: Install dependencies run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev -y - run: flutter pub get - run: flutter build linux --release --target-platform linux-x64 - name: Create archive run: tar -czf fluffychat-linux-x64.tar.gz -C build/linux/x64/release/bundle/ . - name: Upload to release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.PAGES_DEPLOY_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: fluffychat-linux-x64.tar.gz asset_name: fluffychat-linux-x64.tar.gz asset_content_type: application/gzip deploy_playstore: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - uses: actions/setup-java@v4 with: java-version: ${{ env.JAVA_VERSION }} distribution: 'zulu' - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} cache: true - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: '3.3' - name: Install Fastlane run: gem install fastlane -NV - name: Apply Google Services Patch run: git apply ./scripts/enable-android-google-services.patch - name: Remove Emoji Font run: | rm -rf fonts/NotoEmoji yq -i 'del( .flutter.fonts[] | select(.family == "NotoEmoji") )' pubspec.yaml - run: flutter pub get - name: Prepare Android Release Build env: FDROID_KEY: ${{ secrets.FDROID_KEY }} FDROID_KEY_PASS: ${{ secrets.FDROID_KEY_PASS }} PLAYSTORE_DEPLOY_KEY: ${{ secrets.PLAYSTORE_DEPLOY_KEY }} run: ./scripts/prepare-android-release.sh - name: Build Android Release run: flutter build appbundle --target-platform android-arm,android-arm64,android-x64 - name: Get Tag Name id: tag_name run: echo "::set-output name=tag::$(echo ${GITHUB_REF#refs/tags/})" - name: Deploy Android Release run: | mkdir -p build/android cp build/app/outputs/bundle/release/app-release.aab build/android/ cd android bundle install bundle update fastlane bundle exec fastlane deploy_internal_test if [[ $GITHUB_REF_NAME == rc* ]]; then bundle exec fastlane deploy_candidate else bundle exec fastlane deploy_release fi cd .. promote_snapcraft: runs-on: ubuntu-latest env: SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }} steps: - name: Check out Git repository uses: actions/checkout@v4 - name: Install Snapcraft uses: samuelmeuli/action-snapcraft@v2 - name: Get Tag Name id: tag_name run: echo "::set-output name=tag::$(echo ${GITHUB_REF#refs/tags/})" - name: Promote Snap env: # Workaround for https://github.com/snapcore/snapcraft/issues/4439 SNAPCRAFT_HAS_TTY: "true" run: | if [[ $GITHUB_REF_NAME == rc* ]]; then yes | snapcraft promote fluffychat --from-channel edge --to-channel candidate else yes | snapcraft promote fluffychat --from-channel edge --to-channel stable fi deploy_docker: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Check out Git repository uses: actions/checkout@v4 - name: Log in to the Container registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}