name: Release on: workflow_dispatch: env: GH_TOKEN: ${{ secrets.GH_TOKEN }} go_version: '1.17' flutter_channel: 'stable' host_linux: ubuntu-latest host_windows: windows-latest host_macos: macos-latest jobs: ci-pass: name: CI is green # https://github.com/actions/runner/issues/2394 runs-on: ubuntu-latest # ${{ env.host_linux }} needs: - check_release - build_release_assets - send_to_community steps: - run: exit 0 check_release: name: Check release runs-on: ${{ env.host_linux }} steps: - uses: actions/checkout@v3 with: repository: ${{ github.event.inputs.repo }} ref: 'master' - uses: actions/setup-go@v2 with: go-version: ${{ env.go_version }} - name: Cache go modules uses: actions/cache@v3 with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ env.host_linux }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ env.host_linux }}-go- - name: Check release run: | cd ci go run ./cmd/check_release build_release_assets: name: Build release assets needs: - check_release strategy: fail-fast: false matrix: sources: - branch: master - branch: resizeful config: - target: windows host: ${{ env.host_windows }} flutter_version: '2.10.3' - target: macos host: ${{ env.host_macos }} flutter_version: '2.10.3' - target: linux host: ${{ env.host_linux }} flutter_version: '2.10.3' - target: ios host: ${{ env.host_macos }} flutter_version: '3.7.3' - target: android-arm32 host: ${{ env.host_linux }} flutter_version: '2.10.5' - target: android-arm64 host: ${{ env.host_linux }} flutter_version: '2.10.5' - target: android-x86_64 host: ${{ env.host_linux }} flutter_version: '2.10.5' - target: android-arm32 host: ${{ env.host_linux }} flutter_version: '3.7.3' - target: android-arm64 host: ${{ env.host_linux }} flutter_version: '3.7.3' - target: android-x86_64 host: ${{ env.host_linux }} flutter_version: '3.7.3' runs-on: ${{ matrix.config.host }} env: TARGET: ${{ matrix.config.target }} FLUTTER_VERSION: ${{ matrix.config.flutter_version }} BRANCH: ${{ matrix.sources.branch }} steps: # Setup golang env and cache go module - name: Setup golang uses: actions/setup-go@v2 with: go-version: ${{ env.go_version }} - name: Cache go modules (Windows) if: matrix.config.host == env.host_windows uses: actions/cache@v3 with: path: | ~\AppData\Local\go-build ~\go\pkg\mod key: ${{ matrix.config.host }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ matrix.config.host }}-go- - name: Cache go modules (Linux) if: matrix.config.host == env.host_linux uses: actions/cache@v3 with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ matrix.config.host }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ matrix.config.host }}-go- - name: Cache go modules (macOS) if: matrix.config.host == env.host_macos uses: actions/cache@v3 with: path: | ~/Library/Caches/go-build ~/go/pkg/mod key: ${{ matrix.config.host }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ matrix.config.host }}-go- # checkout - name: Checkout uses: actions/checkout@v3 with: ref: ${{ matrix.config.host }} # check_access - id: check_asset name: Check asset run: | cd ci go run ./cmd/check_asset # - name: Setup flutter if: steps.check_asset.outputs.skip_build != 'true' uses: subosito/flutter-action@v2 with: channel: ${{ env.flutter_channel }} flutter-version: ${{ env.flutter_version }} architecture: x64 - name: Check core if: steps.check_asset.outputs.skip_build != 'true' uses: actions/checkout@v3 with: repository: 'niuhuan/pikapika-go-core' token: ${{ secrets.GH_TOKEN }} path: 'go' - name: Cache Flutter dependencies (Linux/Android) if: steps.check_asset.outputs.skip_build != 'true' && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' || matrix.config.target == 'linux' ) uses: actions/cache@v3 with: path: /opt/hostedtoolcache/flutter key: ${{ runner.os }}-flutter - name: Cache Flutter dependencies (Mac host) if: steps.check_asset.outputs.skip_build != 'true' && ( matrix.config.target == 'ios' || matrix.config.target == 'macos' ) uses: actions/cache@v3 with: path: /Users/runner/hostedtoolcache/flutter key: ${{ runner.os }}-flutter - name: Cache Gradle dependencies (Android) if: steps.check_asset.outputs.skip_build != 'true' && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' ) uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: Setup java (Android) if: steps.check_asset.outputs.skip_build != 'true' && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' ) uses: actions/setup-java@v3 with: java-version: 8 distribution: 'zulu' - name: Setup android tools (Android) if: steps.check_asset.outputs.skip_build != 'true' && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' ) uses: maxim-lobanov/setup-android-tools@v1 with: packages: | platform-tools platforms;android-32 build-tools;30.0.2 ndk;23.1.7779620 - name: Setup msys2 (Windows) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'windows' uses: msys2/setup-msys2@v2 with: install: gcc make - name: Install dependencies (Linux) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'linux' env: ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' run: | curl -JOL https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage chmod a+x appimagetool-x86_64.AppImage mkdir -p ${GITHUB_WORKSPACE}/bin mv appimagetool-x86_64.AppImage ${GITHUB_WORKSPACE}/bin/appimagetool echo ::add-path::${GITHUB_WORKSPACE}/bin sudo apt-get update sudo apt-get install -y libgl1-mesa-dev xorg-dev libfuse2 - name: Install hover (desktop) if: steps.check_asset.outputs.skip_build != 'true' && ( matrix.config.target == 'linux' || matrix.config.target == 'windows' || matrix.config.target == 'macos') run: | go install github.com/go-flutter-desktop/hover@latest - name: Install go mobile (mobile) if: steps.check_asset.outputs.skip_build != 'true' && ( matrix.config.target == 'ios' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-arm32' || matrix.config.target == 'android-x86_64' ) run: | go install golang.org/x/mobile/cmd/gomobile@latest - name: Set-Version (All) if: steps.check_asset.outputs.skip_build != 'true' run: | cd ci cp version.code.txt ../lib/assets/version.txt - name: Upgrade deps version (flutter2 non-mac) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.host != '${{ env.host_macos }}' && startsWith(matrix.config.flutter_version, '2') run: | sed -i "s/another_xlider: ^1.0.1+2/another_xlider: 1.0.1+2/g" pubspec.yaml sed -i "s/flutter_styled_toast: ^2.0.0/flutter_styled_toast: 2.0.0/g" pubspec.yaml sed -i "s/filesystem_picker: ^3.0.0-beta.1/filesystem_picker: 2.0.0/g" pubspec.yaml sed -i "s/file_picker: ^5.2.1/file_picker: 4.6.1/g" pubspec.yaml sed -i "s/multi_select_flutter: ^4.0.0/multi_select_flutter: 4.1.2/g" pubspec.yaml sed -i "s/modal_bottom_sheet: ^3.0.0-pre/modal_bottom_sheet: 2.0.1/g" pubspec.yaml sed -i "s/Icons.energy_savings_leaf/Icons.ad_units/g" lib/screens/SettingsScreen.dart flutter pub get - name: Upgrade deps version (flutter2 mac) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.host == '${{ env.host_macos }}' && startsWith(matrix.config.flutter_version, '2') run: | brew install gnu-sed gsed -i "s/another_xlider: ^1.0.1+2/another_xlider: 1.0.1+2/g" pubspec.yaml gsed -i "s/flutter_styled_toast: ^2.0.0/flutter_styled_toast: 2.0.0/g" pubspec.yaml gsed -i "s/filesystem_picker: ^3.0.0-beta.1/filesystem_picker: 2.0.0/g" pubspec.yaml gsed -i "s/file_picker: ^5.2.1/file_picker: 4.6.1/g" pubspec.yaml gsed -i "s/multi_select_flutter: ^4.0.0/multi_select_flutter: 4.1.2/g" pubspec.yaml gsed -i "s/multi_select_flutter: ^4.0.0/multi_select_flutter: 4.1.2/g" pubspec.yaml gsed -i "s/modal_bottom_sheet: ^3.0.0-pre/modal_bottom_sheet: 2.0.1/g" pubspec.yaml gsed -i "s/Icons.energy_savings_leaf/Icons.ad_units/g" lib/screens/SettingsScreen.dart flutter pub get - name: Build (windows) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'windows' run: | hover build windows curl -JOL https://github.com/niuhuan/static-resources/releases/download/windows_build_tools/Resource_Hacker_5.1.8.zip Expand-Archive .\Resource_Hacker_5.1.8.zip cmd /c "Resource_Hacker_5.1.8\ResourceHacker.exe" -open go\build\outputs\windows-release\pikapika.exe -save go\build\outputs\windows-release\pikapika.exe -action addskip -res go/assets/icon.ico -mask ICONGROUP,MAINICON,0 cd go\build\outputs\windows-release DEL flutter_engine.pdb DEL flutter_engine.exp DEL flutter_engine.lib Compress-Archive * ../../../../build/build.zip - name: Build (macos) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'macos' run: | hover build darwin-dmg mv go/build/outputs/darwin-dmg-release/*.dmg build/build.dmg - name: Build (linux) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'linux' run: | curl -JOL https://github.com/junmer/source-han-serif-ttf/raw/master/SubsetTTF/CN/SourceHanSerifCN-Regular.ttf mkdir -p fonts mv SourceHanSerifCN-Regular.ttf fonts/Roboto.ttf cat ci/linux_font.yaml >> pubspec.yaml hover build linux-appimage mv go/build/outputs/linux-appimage-release/*.AppImage build/build.AppImage - name: Append application-identifier (ios) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'ios' run: | /usr/libexec/PlistBuddy -c 'Add :application-identifier string niuhuan.pikapika' ios/Runner/Info.plist - name: Build (ios) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'ios' run: | sh scripts/build-ipa.sh - name: Build (android-arm32) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'android-arm32' run: | sh scripts/build-apk-arm.sh - name: Build (android-arm64) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'android-arm64' run: | sh scripts/build-apk-arm64.sh - name: Build (android-x86_64) if: steps.check_asset.outputs.skip_build != 'true' && matrix.config.target == 'android-x86_64' run: | sh scripts/build-apk-x64.sh - name: Sign APK (Android) if: steps.check_asset.outputs.skip_build != 'true' && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' ) env: KEY_FILE_BASE64: ${{ secrets.KEY_FILE_BASE64 }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} run: | sh scripts/sign-apk-github-actions.sh - name: Upload Asset (All) if: steps.check_asset.outputs.skip_build != 'true' run: | cd ci go run ./cmd/upload_asset send_to_community: needs: - check_release - build_release_assets name: Send message to community runs-on: ${{ env.host_linux }} steps: - uses: actions/checkout@v3 with: repository: ${{ github.event.inputs.repo }} ref: 'master' - uses: actions/setup-go@v2 with: go-version: ${{ env.go_version }} - name: Cache go modules uses: actions/cache@v3 with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Send to community env: TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} TG_CHAT_IDS: ${{ secrets.TG_CHAT_IDS }} DISCORD_BOT_TOKEN: ${{ secrets.DISCORD_BOT_TOKEN }} DISCORD_CHAT_IDS: ${{ secrets.DISCORD_CHAT_IDS }} run: | cd ci go run ./cmd/send_to_community