Spotube Release Binary #128
Workflow file for this run
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: Spotube Release Binary | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: Version to release (x.x.x) | |
default: 3.1.0 | |
required: true | |
channel: | |
type: choice | |
description: Release Channel | |
required: true | |
options: | |
- stable | |
- nightly | |
default: nightly | |
debug: | |
description: Debug on failed when channel is nightly | |
required: true | |
type: boolean | |
default: false | |
dry_run: | |
description: Dry run | |
required: true | |
type: boolean | |
default: true | |
env: | |
FLUTTER_VERSION: '3.13.2' | |
jobs: | |
windows: | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: subosito/[email protected] | |
with: | |
cache: true | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
- name: Replace pubspec version and BUILD_VERSION Env (nightly) | |
if: ${{ inputs.channel == 'nightly' }} | |
run: | | |
choco install sed make yq -y | |
yq -i '.version |= sub("\+\d+", "+${{ inputs.channel }}.")' pubspec.yaml | |
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml | |
"BUILD_VERSION=${{ inputs.version }}+${{ inputs.channel }}.${{ github.run_number }}" >> $env:GITHUB_ENV | |
- name: BUILD_VERSION Env (stable) | |
if: ${{ inputs.channel == 'stable' }} | |
run: | | |
"BUILD_VERSION=${{ inputs.version }}" >> $env:GITHUB_ENV | |
- name: Replace version in files | |
run: | | |
choco install sed make -y | |
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ env.BUILD_VERSION }}/" windows/runner/Runner.rc | |
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ env.BUILD_VERSION }}/" choco-struct/tools/VERIFICATION.txt | |
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ env.BUILD_VERSION }}/" choco-struct/spotube.nuspec | |
- name: Create Stable .env | |
if: ${{ inputs.channel == 'stable' }} | |
run: echo '${{ secrets.DOTENV_RELEASE }}' > .env | |
- name: Create Nightly .env | |
if: ${{ inputs.channel == 'nightly' }} | |
run: echo '${{ secrets.DOTENV_NIGHTLY }}' > .env | |
- name: Generating Secrets | |
run: | | |
flutter config --enable-windows-desktop | |
flutter pub get | |
dart run build_runner build --delete-conflicting-outputs --enable-experiment=records,patterns | |
- name: Build Windows Executable | |
run: | | |
dart pub global activate flutter_distributor | |
make innoinstall | |
flutter_distributor package --platform=windows --targets=exe --skip-clean | |
mv dist/**/spotube-*-windows-setup.exe dist/Spotube-windows-x86_64-setup.exe | |
- name: Create Chocolatey Package and set hash | |
if: ${{ inputs.channel == 'stable' }} | |
run: | | |
Set-Variable -Name HASH -Value (Get-FileHash dist\Spotube-windows-x86_64-setup.exe).Hash | |
sed -i "s/%{{WIN_SHA256}}%/$HASH/" choco-struct/tools/VERIFICATION.txt | |
make choco | |
mv dist/spotube.*.nupkg dist/Spotube-windows-x86_64.nupkg | |
- name: Debug With SSH When fails | |
if: ${{ failure() && inputs.debug && inputs.channel == 'nightly' }} | |
uses: mxschmitt/action-tmate@v3 | |
with: | |
limit-access-to-actor: true | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Spotube-Release-Binaries | |
path: dist/ | |
linux: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: subosito/[email protected] | |
with: | |
cache: true | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
- name: Get current date | |
id: date | |
run: echo "::set-output name=date::$(date +'%Y-%m-%d')" | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y tar clang cmake ninja-build pkg-config libgtk-3-dev make python3-pip python3-setuptools desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse libunwind-dev locate patchelf gir1.2-appindicator3-0.1 libappindicator3-1 libappindicator3-dev libsecret-1-0 libjsoncpp25 libsecret-1-dev libjsoncpp-dev libnotify-bin libnotify-dev mpv libmpv-dev | |
- name: Install AppImage Tool | |
run: | | |
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" | |
chmod +x appimagetool | |
mv appimagetool /usr/local/bin/ | |
- name: Replace pubspec version and BUILD_VERSION Env (nightly) | |
if: ${{ inputs.channel == 'nightly' }} | |
run: | | |
curl -sS https://webi.sh/yq | sh | |
yq -i '.version |= sub("\+\d+", "+${{ inputs.channel }}.")' pubspec.yaml | |
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml | |
echo "BUILD_VERSION=${{ inputs.version }}+${{ inputs.channel }}.${{ github.run_number }}" >> $GITHUB_ENV | |
- name: BUILD_VERSION Env (stable) | |
if: ${{ inputs.channel == 'stable' }} | |
run: | | |
echo "BUILD_VERSION=${{ inputs.version }}" >> $GITHUB_ENV | |
- name: Create Stable .env | |
if: ${{ inputs.channel == 'stable' }} | |
run: echo '${{ secrets.DOTENV_RELEASE }}' > .env | |
- name: Create Nightly .env | |
if: ${{ inputs.channel == 'nightly' }} | |
run: echo '${{ secrets.DOTENV_NIGHTLY }}' > .env | |
- name: Replace Version in files | |
run: | | |
sed -i 's|%{{APPDATA_RELEASE}}%|<release version="${{ env.BUILD_VERSION }}" date="${{ steps.date.outputs.date }}" />|' linux/com.github.KRTirtho.Spotube.appdata.xml | |
- name: Generate Secrets | |
run: | | |
flutter config --enable-linux-desktop | |
flutter pub get | |
dart run build_runner build --delete-conflicting-outputs --enable-experiment=records,patterns | |
- name: Build Linux Packages | |
run: | | |
dart pub global activate flutter_distributor | |
alias dpkg-deb="dpkg-deb --Zxz" | |
flutter_distributor package --platform=linux --targets=deb | |
flutter_distributor package --platform=linux --targets=appimage | |
flutter_distributor package --platform=linux --targets=rpm | |
- name: Create tar.xz (stable) | |
if: ${{ inputs.channel == 'stable' }} | |
run: make tar VERSION=${{ env.BUILD_VERSION }} ARCH=x64 PKG_ARCH=x86_64 | |
- name: Create tar.xz (nightly) | |
if: ${{ inputs.channel == 'nightly' }} | |
run: make tar VERSION=nightly ARCH=x64 PKG_ARCH=x86_64 | |
- name: Move Files to dist | |
run: | | |
mv build/spotube-linux-*-x86_64.tar.xz dist/ | |
mv dist/**/spotube-*-linux.deb dist/Spotube-linux-x86_64.deb | |
mv dist/**/spotube-*-linux.rpm dist/Spotube-linux-x86_64.rpm | |
mv dist/**/spotube-*-linux.AppImage dist/Spotube-linux-x86_64.AppImage | |
- name: Debug With SSH When fails | |
if: ${{ failure() && inputs.debug && inputs.channel == 'nightly' }} | |
uses: mxschmitt/action-tmate@v3 | |
with: | |
limit-access-to-actor: true | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: Spotube-Release-Binaries | |
path: dist/ | |
linux_arm: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: subosito/[email protected] | |
with: | |
cache: true | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
- uses: docker/setup-qemu-action@v3 | |
- uses: docker/setup-buildx-action@v3 | |
with: | |
platforms: linux/arm64 | |
- name: Get current date | |
id: date | |
run: echo "::set-output name=date::$(date +'%Y-%m-%d')" | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y tar clang cmake ninja-build pkg-config libgtk-3-dev make python3-pip python3-setuptools desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse libunwind-dev locate patchelf gir1.2-appindicator3-0.1 libappindicator3-1 libappindicator3-dev libsecret-1-0 libjsoncpp25 libsecret-1-dev libjsoncpp-dev libnotify-bin libnotify-dev mpv libmpv-dev | |
- name: Replace pubspec version and BUILD_VERSION Env (nightly) | |
if: ${{ inputs.channel == 'nightly' }} | |
run: | | |
curl -sS https://webi.sh/yq | sh | |
yq -i '.version |= sub("\+\d+", "+${{ inputs.channel }}.")' pubspec.yaml | |
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml | |
echo "BUILD_VERSION=${{ inputs.version }}+${{ inputs.channel }}.${{ github.run_number }}" >> $GITHUB_ENV | |
- name: BUILD_VERSION Env (stable) | |
if: ${{ inputs.channel == 'stable' }} | |
run: | | |
echo "BUILD_VERSION=${{ inputs.version }}" >> $GITHUB_ENV | |
- name: Create Stable .env | |
if: ${{ inputs.channel == 'stable' }} | |
run: echo '${{ secrets.DOTENV_RELEASE }}' > .env | |
- name: Create Nightly .env | |
if: ${{ inputs.channel == 'nightly' }} | |
run: echo '${{ secrets.DOTENV_NIGHTLY }}' > .env | |
- name: Replace Version in files | |
run: | | |
sed -i 's|%{{APPDATA_RELEASE}}%|<release version="${{ env.BUILD_VERSION }}" date="${{ steps.date.outputs.date }}" />|' linux/com.github.KRTirtho.Spotube.appdata.xml | |
echo "build_arch: aarch64" >> linux/packaging/rpm/make_config.yaml | |
- name: Generate Secrets | |
run: | | |
flutter config --enable-linux-desktop | |
flutter pub get | |
dart run build_runner build --delete-conflicting-outputs --enable-experiment=records,patterns | |
- name: Setup Docker build | |
run: | | |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
docker buildx create --name spotube_builder --use | |
docker buildx inspect spotube_builder --bootstrap | |
- name: Run Docker build | |
run: | | |
docker buildx build -t spotube_arm:latest .github \ | |
--platform linux/arm64 \ | |
--build-arg BUILD_VERSION=${{ env.BUILD_VERSION }} | |
docker run -v $(pwd)/bundle:/host/app/bundle spotube_arm:latest | |
- name: Debug With SSH When fails | |
if: ${{ failure() && inputs.debug && inputs.channel == 'nightly' }} | |
uses: mxschmitt/action-tmate@v3 | |
with: | |
limit-access-to-actor: true | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: Spotube-Release-Binaries | |
path: bundle/ | |
android: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: subosito/[email protected] | |
with: | |
cache: true | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev make python3-pip python3-setuptools patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse xmlstarlet | |
- name: Replace pubspec version and BUILD_VERSION Env (nightly) | |
if: ${{ inputs.channel == 'nightly' }} | |
run: | | |
curl -sS https://webi.sh/yq | sh | |
yq -i '.version |= sub("\+\d+", "+${{ inputs.channel }}.")' pubspec.yaml | |
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml | |
echo "BUILD_VERSION=${{ inputs.version }}+${{ inputs.channel }}.${{ github.run_number }}" >> $GITHUB_ENV | |
- name: BUILD_VERSION Env (stable) | |
if: ${{ inputs.channel == 'stable' }} | |
run: | | |
echo "BUILD_VERSION=${{ inputs.version }}" >> $GITHUB_ENV | |
- name: Create Stable .env | |
if: ${{ inputs.channel == 'stable' }} | |
run: echo '${{ secrets.DOTENV_RELEASE }}' > .env | |
- name: Create Nightly .env | |
if: ${{ inputs.channel == 'nightly' }} | |
run: echo '${{ secrets.DOTENV_NIGHTLY }}' > .env | |
- name: Generate Secrets | |
run: | | |
flutter pub get | |
dart run build_runner build --delete-conflicting-outputs --enable-experiment=records,patterns | |
- name: Sign Apk | |
run: | | |
echo '${{ secrets.KEYSTORE }}' | base64 --decode > android/app/upload-keystore.jks | |
echo '${{ secrets.KEY_PROPERTIES }}' > android/key.properties | |
- name: Build Apk | |
run: | | |
flutter build apk | |
flutter build appbundle | |
mv build/app/outputs/apk/release/app-release.apk build/Spotube-android-all-arch.apk | |
mv build/app/outputs/bundle/release/app-release.aab build/Spotube-playstore-all-arch.aab | |
- name: Build Playstore AppBundle | |
run: | | |
echo 'ENABLE_UPDATE_CHECK=0' >> .env | |
dart run build_runner build --delete-conflicting-outputs --enable-experiment=records,patterns | |
export MANIFEST=android/app/src/main/AndroidManifest.xml | |
xmlstarlet ed -d '//meta-data[@android:name="com.google.android.gms.car.application"]' $MANIFEST > $MANIFEST.tmp | |
mv $MANIFEST.tmp $MANIFEST | |
flutter build appbundle | |
mv build/app/outputs/bundle/release/app-release.aab build/Spotube-playstore-all-arch.aab | |
- name: Debug With SSH When fails | |
if: ${{ failure() && inputs.debug && inputs.channel == 'nightly' }} | |
uses: mxschmitt/action-tmate@v3 | |
with: | |
limit-access-to-actor: true | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: Spotube-Release-Binaries | |
path: | | |
build/Spotube-android-all-arch.apk | |
build/Spotube-playstore-all-arch.aab | |
macos: | |
runs-on: macos-12 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: subosito/[email protected] | |
with: | |
cache: true | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
- name: Replace pubspec version and BUILD_VERSION Env (nightly) | |
if: ${{ inputs.channel == 'nightly' }} | |
run: | | |
brew install yq | |
yq -i '.version |= sub("\+\d+", "+${{ inputs.channel }}.")' pubspec.yaml | |
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml | |
echo "BUILD_VERSION=${{ inputs.version }}+${{ inputs.channel }}.${{ github.run_number }}" >> $GITHUB_ENV | |
- name: BUILD_VERSION Env (stable) | |
if: ${{ inputs.channel == 'stable' }} | |
run: | | |
echo "BUILD_VERSION=${{ inputs.version }}" >> $GITHUB_ENV | |
- name: Create Stable .env | |
if: ${{ inputs.channel == 'stable' }} | |
run: echo '${{ secrets.DOTENV_RELEASE }}' > .env | |
- name: Create Nightly .env | |
if: ${{ inputs.channel == 'nightly' }} | |
run: echo '${{ secrets.DOTENV_NIGHTLY }}' > .env | |
- name: Generate Secrets | |
run: | | |
flutter pub get | |
flutter pub remove media_kit_native_event_loop | |
dart run build_runner build --delete-conflicting-outputs --enable-experiment=records,patterns | |
- name: Build Macos App | |
run: | | |
flutter config --enable-macos-desktop | |
flutter build macos | |
du -sh build/macos/Build/Products/Release/spotube.app | |
- name: Package Macos App | |
run: | | |
npm install -g appdmg | |
mkdir -p build/${{ env.BUILD_VERSION }} | |
appdmg appdmg.json build/Spotube-macos-universal.dmg | |
- name: Debug With SSH When fails | |
if: ${{ failure() && inputs.debug && inputs.channel == 'nightly' }} | |
uses: mxschmitt/action-tmate@v3 | |
with: | |
limit-access-to-actor: true | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: Spotube-Release-Binaries | |
path: | | |
build/Spotube-macos-universal.dmg | |
# linux_arm: | |
# runs-on: ubuntu-latest | |
# steps: | |
# - run: | | |
# sudo apt-get update -y | |
# sudo apt-get install -y curl | |
# - name: Extract branch name | |
# shell: bash | |
# run: echo "BRANCH=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_ENV | |
# - name: Trigger CircleCI Pipeline | |
# run: | | |
# curl -X POST https://circleci.com/api/v2/project/cci-f9azl/spotube/pipeline \ | |
# --header "Circle-Token: ${{secrets.CCI_TOKEN}}" \ | |
# --header "content-type: application/json" \ | |
# --data '{"branch": "${{env.BRANCH}}", "parameters":{"GHA_Action":"true","version":"${{inputs.version}}","channel":"${{inputs.channel}}","dry_run":${{inputs.dry_run}}}}' | |
upload: | |
runs-on: ubuntu-latest | |
needs: | |
- windows | |
- linux | |
- linux_arm | |
- android | |
- macos | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: Spotube-Release-Binaries | |
path: ./Spotube-Release-Binaries | |
- name: Install dependencies | |
run: sudo apt-get install tree -y | |
- name: Generate Checksums | |
run: | | |
tree . | |
md5sum Spotube-Release-Binaries/* >> RELEASE.md5sum | |
sha256sum Spotube-Release-Binaries/* >> RELEASE.sha256sum | |
sed -i 's|Spotube-Release-Binaries/||' RELEASE.sha256sum RELEASE.md5sum | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: Spotube-Release-Binaries | |
path: | | |
RELEASE.md5sum | |
RELEASE.sha256sum | |
- name: Upload Release Binaries (stable) | |
if: ${{ !inputs.dry_run && inputs.channel == 'stable' }} | |
uses: ncipollo/release-action@v1 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
tag: v${{ inputs.version }} # mind the "v" prefix | |
omitBodyDuringUpdate: true | |
omitNameDuringUpdate: true | |
omitPrereleaseDuringUpdate: true | |
allowUpdates: true | |
artifacts: Spotube-Release-Binaries/*,RELEASE.sha256sum,RELEASE.md5sum | |
- name: Upload Release Binaries (nightly) | |
if: ${{ !inputs.dry_run && inputs.channel == 'nightly' }} | |
uses: ncipollo/release-action@v1 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
tag: nightly | |
omitBodyDuringUpdate: true | |
omitNameDuringUpdate: true | |
omitPrereleaseDuringUpdate: true | |
allowUpdates: true | |
artifacts: Spotube-Release-Binaries/*,RELEASE.sha256sum,RELEASE.md5sum |