cd: create a separate publish workflow

This commit is contained in:
Kingkor Roy Tirtho 2023-03-15 10:05:59 +06:00
parent 4204789d4b
commit 0cb87ba6df
5 changed files with 102 additions and 513 deletions

View File

@ -1,204 +0,0 @@
name: Spotube Nightly
on:
push:
branches:
- build
workflow_dispatch:
jobs:
build_ubuntu:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.8.0
with:
cache: true
- name: Getting current date
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
- name: Installing dependencies and configuring version
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 libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev locate patchelf libunwind-dev
curl -sS https://webi.sh/yq | sh
yq -i '.version |= sub("\+\d+", "+nightly.")' pubspec.yaml
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml
flutter config --enable-linux-desktop
flutter pub get
- name: Installing appimagetool
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: Generating Secrets
run: |
echo '${{ secrets.DOTENV_NIGHTLY }}' > .env
dart bin/create-secrets.dart '${{ secrets.LYRICS_SECRET }}' '${{ secrets.SPOTIFY_SECRET }}'
- name: Building Linux application
# dart pub global activate flutter_distributor
run: |
git clone https://github.com/KRTirtho/flutter_distributor.git flutter_distributor
flutter pub global activate melos 2.9.0
cd flutter_distributor
melos bootstrap
cd ..
dart flutter_distributor/packages/flutter_distributor/bin/main.dart package --platform=linux --targets=deb,appimage,rpm --skip-clean
make tar
mv build/Spotube-linux-x86_64.tar.xz dist/Spotube-linux-x86_64-nightly.tar.xz
mv dist/**/spotube-*-linux.deb dist/Spotube-linux-x86_64-nightly.deb
mv dist/**/spotube-*-linux.rpm dist/Spotube-linux-x86_64-nightly.rpm
mv dist/**/spotube-*-linux.AppImage dist/Spotube-linux-x86_64-nightly.AppImage
- name: Uploading binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file_glob: true
file: dist/*
tag: refs/tags/nightly
body: |
## nightly-${{ github.run_number }}
Nightly build no. ${{ github.run_number }} of Spotube
overwrite: true
- name: Setting up upterm session
if: ${{ failure() }}
uses: lhotari/action-upterm@v1
with:
limit-access-to-actor: true
build_android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.8.0
with:
cache: true
- name: Installing dependencies and configuring version
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 desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse
curl -sS https://webi.sh/yq | sh
yq -i '.version |= sub("\+\d+", "+nightly.")' pubspec.yaml
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml
flutter pub get
- name: Generating Secrets and key store
run: |
echo '${{ secrets.DOTENV_NIGHTLY }}' > .env
dart bin/create-secrets.dart '${{ secrets.LYRICS_SECRET }}' '${{ secrets.SPOTIFY_SECRET }}'
echo '${{ secrets.KEYSTORE }}' | base64 --decode > android/app/upload-keystore.jks
echo '${{ secrets.KEY_PROPERTIES }}' > android/key.properties
- name: Building Android apk
run: |
flutter build apk
mv build/app/outputs/apk/release/app-release.apk build/Spotube-android-all-arch-nightly.apk
- name: Uploading binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: build/Spotube-android-all-arch-nightly.apk
tag: refs/tags/nightly
body: |
## nightly-${{ github.run_number }}
Nightly build no. ${{ github.run_number }} of Spotube
overwrite: true
- name: Setting up upterm session
if: ${{ failure() }}
uses: lhotari/action-upterm@v1
with:
limit-access-to-actor: true
build_windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.8.0
with:
cache: true
- name: Installing dependencies and configuring versions
run: |
choco install sed make yq -y
yq -i '.version |= sub("\+\d+", "+nightly.")' pubspec.yaml
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ github.run_number }}/" windows/runner/Runner.rc
flutter config --enable-windows-desktop
flutter pub get
- name: Generating Secrets
run: |
echo '${{ secrets.DOTENV_NIGHTLY }}' > .env
dart bin/create-secrets.dart '${{ secrets.LYRICS_SECRET }}' '${{ secrets.SPOTIFY_SECRET }}'
- name: Building for Windows x64
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-nightly.exe
- name: Uploading binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file_glob: true
file: dist/*
tag: refs/tags/nightly
body: |
## nightly-${{ github.run_number }}
Nightly build no. ${{ github.run_number }} of Spotube
overwrite: true
build_macos:
runs-on: macos-11
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.8.0
with:
cache: true
- name: Installing dependencies and configuring versions
run: |
brew install yq
yq -i '.version |= sub("\+\d+", "+nightly.")' pubspec.yaml
yq -i '.version += strenv(GITHUB_RUN_NUMBER)' pubspec.yaml
flutter config --enable-macos-desktop
flutter pub get
- name: Generating Secrets
run: |
echo '${{ secrets.DOTENV_NIGHTLY }}' > .env
dart bin/create-secrets.dart '${{ secrets.LYRICS_SECRET }}' '${{ secrets.SPOTIFY_SECRET }}'
- name: Building for MacOS
run: |
flutter build macos
npm install -g appdmg
appdmg appdmg.json build/Spotube-macos-x86_64-nightly.dmg
- name: Uploading binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: build/Spotube-macos-x86_64-nightly.dmg
tag: refs/tags/nightly
body: |
## nightly-${{ github.run_number }}
Nightly build no. ${{ github.run_number }} of Spotube
overwrite: true
- name: Setting up upterm session
if: ${{ failure() }}
uses: lhotari/action-upterm@v1
with:
limit-access-to-actor: true

View File

@ -0,0 +1,98 @@
name: Spotube Publish Binary
on:
workflow_dispatch:
inputs:
version:
description: Version to release (x.x.x)
default: 2.7.0
required: true
dry_run:
description: Dry run
required: true
type: boolean
default: false
jobs:
flathub:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
with:
repository: flathub/com.github.KRTirtho.Spotube
token: ${{ secrets.FLATHUB_TOKEN }}
- uses: actions/checkout@v3
with:
path: spotube
- name: Update flathub version
run: |
python3 spotube/scripts/update_flathub_version.py ${{ inputs.version }}
rm -rf spotube
git config --global user.email "krtirtho@gmail.com"
git config --global user.name "Kingkor Roy Tirtho"
git add .
git commit -m "v${{ inputs.version }} Update"
git branch update-${{ inputs.version }}
git switch update-${{ inputs.version }}
- name: Push to flathub
if: ${{ !inputs.dry_run }}
run: git push -u origin update-${{ inputs.version }}
aur:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: dsaltares/fetch-gh-release-asset@master
with:
version: tags/v${{ inputs.version }} # mind the "v" prefix
file: Spotube-linux-x86_64.tar.xz
token: ${{ secrets.GITHUB_TOKEN }}
- name: Update PKGBUILD versions
run: |
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ inputs.version }}/" aur-struct/PKGBUILD
sed -i "s/%{{PKGREL}}%/1/" aur-struct/PKGBUILD
sed -i "s/%{{LINUX_MD5}}%/`md5sum Spotube-linux-x86_64.tar.xz | awk '{print $1}'`/" aur-struct/PKGBUILD
- name: Release to AUR
if: ${{ !inputs.dry_run }}
uses: KSXGitHub/github-actions-deploy-aur@v2.6.0
with:
pkgname: spotube-bin
pkgbuild: aur-struct/PKGBUILD
commit_username: ${{ secrets.AUR_USERNAME }}
commit_email: ${{ secrets.AUR_EMAIL }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: Updated to v${{ inputs.version }}
winget:
runs-on: windows-latest
steps:
- name: Release winget package
if: ${{ !inputs.dry_run }}
uses: vedantmgoyal2009/winget-releaser@v2
with:
version: ${{ inputs.version }}
release-tag: v${{ inputs.version }}
identifier: KRTirtho.Spotube
token: ${{ secrets.WINGET_TOKEN }}
chocolatey:
runs-on: windows-latest
steps:
- uses: dsaltares/fetch-gh-release-asset@master
with:
version: tags/v${{ inputs.version }} # mind the "v" prefix
file: Spotube-windows-x86_64.nupkg
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Chocolatey
run: |
choco apikey -k ${{ secrets.CHOCO_API_KEY }} -s https://push.chocolatey.org/
- name: Publish to Chocolatey Repository
if: ${{ !inputs.dry_run }}
run: |
choco push Spotube-windows-x86_64.nupkg

View File

@ -284,7 +284,7 @@ jobs:
tree .
md5sum ./Spotube-Release-Binaries/* >> RELEASE.md5sum
sha256sum ./Spotube-Release-Binaries/* >> RELEASE.sha256sum
sed -i 's|Spotube-Release-Binaries/||' RELEASE.sha256sum RELEASE.md5sum
sed -i 's|./Spotube-Release-Binaries/||' RELEASE.sha256sum RELEASE.md5sum
- uses: actions/upload-artifact@v3
with:
@ -298,7 +298,7 @@ jobs:
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: v${{ inputs.version }}
tag: v${{ inputs.version }} # mind the "v" prefix
omitBodyDuringUpdate: true
omitNameDuringUpdate: true
omitPrereleaseDuringUpdate: true

View File

@ -1,306 +0,0 @@
name: Spotube Release
on:
workflow_dispatch:
inputs:
version:
description: "Version to release (x.x.x)"
required: true
default: "69.420.303"
dry_run:
description: "Dry run"
required: true
type: boolean
default: false
jobs:
publish_chocolatey:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Replace version in files
run: |
choco install sed make -y
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ inputs.version }}/" windows/runner/Runner.rc
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ inputs.version }}/" choco-struct/tools/VERIFICATION.txt
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ inputs.version }}/" choco-struct/spotube.nuspec
- uses: subosito/flutter-action@v2.8.0
with:
cache: true
- name: Generating Secrets
run: |
echo '${{ secrets.DOTENV_RELEASE }}' > .env
flutter config --enable-windows-desktop
flutter pub get
dart bin/create-secrets.dart '${{ secrets.LYRICS_SECRET }}' '${{ secrets.SPOTIFY_SECRET }}'
- name: Build Windows Executable
run: |
dart pub global activate flutter_distributor
make innoinstall
flutter_distributor package --platform=windows --targets=exe --skip-clean
- name: Create Chocolatey Package and set hash
run: |
mv dist/**/spotube-*-windows.exe dist/Spotube-windows-x86_64-setup.exe
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
- run: mv dist/spotube.*.nupkg dist/Spotube-windows-x86_64.nupkg
- name: Publish to Chocolatey Repository
if: ${{ !inputs.dry_run }}
run: |
choco apikey -k ${{ secrets.CHOCO_API_KEY }} -s https://push.chocolatey.org/
choco push dist/Spotube-windows-x86_64.nupkg
echo 'published to community.chocolatey.org'
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: Spotube-Windows-Bundle
path: dist/
- name: Connect via SSH on failure
if: ${{ failure() }}
uses: mxschmitt/action-tmate@v3
with:
limit-access-to-actor: true
timeout-minutes: 15
publish_macos:
runs-on: macos-11
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.8.0
with:
cache: true
- run: echo '${{ secrets.DOTENV_RELEASE }}' > .env
- run: flutter config --enable-macos-desktop
- run: flutter pub get
- run: dart bin/create-secrets.dart '${{ secrets.LYRICS_SECRET }}' '${{ secrets.SPOTIFY_SECRET }}'
- run: flutter build macos
- run: du -sh build/macos/Build/Products/Release/spotube.app
- run: npm install -g appdmg
- run: mkdir -p build/${{ inputs.version }}
- run: appdmg appdmg.json build/${{ inputs.version }}/Spotube-macos-x86_64.dmg
- uses: actions/upload-artifact@v3
with:
name: Spotube-Macos-Bundle
path: |
build/${{ inputs.version }}/Spotube-macos-x86_64.dmg
publish_linux:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.8.0
with:
cache: true
- 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 patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libunwind-dev locate patchelf
- 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 Version in files
run: |
sed -i 's|%{{APPDATA_RELEASE}}%|<release version="${{ inputs.version }}" date="${{ steps.date.outputs.date }}" />|' linux/com.github.KRTirtho.Spotube.appdata.xml
echo '${{ secrets.DOTENV_RELEASE }}' > .env
- name: Generate Secrets
run: |
flutter config --enable-linux-desktop
flutter pub get
dart bin/create-secrets.dart '${{ secrets.LYRICS_SECRET }}' '${{ secrets.SPOTIFY_SECRET }}'
- name: Build Linux Packages
run: |
dart pub global activate flutter_distributor
flutter_distributor package --platform=linux --targets=deb,appimage,rpm --skip-clean
make tar
- 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
- uses: actions/upload-artifact@v3
with:
name: Spotube-Linux-Bundle
path: dist/
publish_android:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.8.0
with:
cache: true
- 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
- name: Generate Secrets and Build apk
run: |
echo '${{ secrets.DOTENV_RELEASE }}' > .env
flutter pub get
dart bin/create-secrets.dart '${{ secrets.LYRICS_SECRET }}' '${{ secrets.SPOTIFY_SECRET }}'
echo '${{ secrets.KEYSTORE }}' | base64 --decode > android/app/upload-keystore.jks
echo '${{ secrets.KEY_PROPERTIES }}' > android/key.properties
flutter build apk
make apk
- uses: actions/upload-artifact@v3
with:
name: Spotube-Android-Bundle
path: |
build/Spotube-android-all-arch.apk
update_release:
needs:
- publish_chocolatey
- publish_macos
- publish_linux
- publish_android
runs-on: ubuntu-22.04
permissions:
contents: write
steps:
- uses: actions/download-artifact@v3
with:
name: Spotube-Windows-Bundle
path: ./Spotube-Windows-Bundle
- uses: actions/download-artifact@v3
with:
name: Spotube-Macos-Bundle
path: ./Spotube-Macos-Bundle
- uses: actions/download-artifact@v3
with:
name: Spotube-Linux-Bundle
path: ./Spotube-Linux-Bundle
- uses: actions/download-artifact@v3
with:
name: Spotube-Android-Bundle
path: ./Spotube-Android-Bundle
- name: Install dependencies
run: sudo apt-get install tree -y
- name: Generate Checksums
run: |
tree .
md5sum ./Spotube-Windows-Bundle/*.{exe,nupkg} >> RELEASE.md5sum
md5sum ./Spotube-Macos-Bundle/*.dmg >> RELEASE.md5sum
md5sum ./Spotube-Linux-Bundle/*.{AppImage,tar.xz,deb,rpm} >> RELEASE.md5sum
md5sum ./Spotube-Android-Bundle/*.apk >> RELEASE.md5sum
sha256sum ./Spotube-Macos-Bundle/*.dmg >> RELEASE.sha256sum
sha256sum ./Spotube-Windows-Bundle/*.{exe,nupkg} >> RELEASE.sha256sum
sha256sum ./Spotube-Linux-Bundle/*.{AppImage,tar.xz,deb,rpm} >> RELEASE.sha256sum
sha256sum ./Spotube-Android-Bundle/*.apk >> RELEASE.sha256sum
sed -i 's|Spotube-.*-Bundle/||' RELEASE.sha256sum RELEASE.md5sum
- uses: actions/upload-artifact@v3
with:
name: Spotube-Sums-Bundle
path: |
RELEASE.md5sum
RELEASE.sha256sum
- name: Upload Release Binaries
if: ${{ !inputs.dry_run }}
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: v${{ inputs.version }}
omitBodyDuringUpdate: true
omitNameDuringUpdate: true
omitPrereleaseDuringUpdate: true
allowUpdates: true
artifacts: Spotube-Windows-Bundle/*,Spotube-Macos-Bundle/*,Spotube-Linux-Bundle/*,Spotube-Android-Bundle/*,RELEASE.sha256sum,RELEASE.md5sum
publish_winget:
needs: update_release
runs-on: windows-latest
if: ${{ !inputs.dry_run }}
steps:
- name: Release winget package
uses: vedantmgoyal2009/winget-releaser@v2
with:
version: ${{ inputs.version }}
release-tag: v${{ inputs.version }}
identifier: KRTirtho.Spotube
token: ${{ secrets.WINGET_TOKEN }}
publish_flathub:
needs: update_release
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
with:
repository: flathub/com.github.KRTirtho.Spotube
token: ${{ secrets.FLATHUB_TOKEN }}
- uses: actions/checkout@v3
with:
path: spotube
- name: Update flathub version
run: |
python3 spotube/scripts/update_flathub_version.py ${{ inputs.version }}
rm -rf spotube
git config --global user.email "krtirtho@gmail.com"
git config --global user.name "Kingkor Roy Tirtho"
git add .
git commit -m "v${{ inputs.version }} Update"
git branch update-${{ inputs.version }}
git switch update-${{ inputs.version }}
- name: Push to flathub
if: ${{ !inputs.dry_run }}
run: git push -u origin update-${{ inputs.version }}
publish_aur:
needs: update_release
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: Download Linux artifacts
uses: actions/download-artifact@v3
with:
name: Spotube-Linux-Bundle
path: ./Spotube-Linux-Bundle
- name: Update PKGBUILD versions
run: |
sed -i "s/%{{SPOTUBE_VERSION}}%/${{ inputs.version }}/" aur-struct/PKGBUILD
sed -i "s/%{{PKGREL}}%/1/" aur-struct/PKGBUILD
sed -i "s/%{{LINUX_MD5}}%/`md5sum Spotube-Linux-Bundle/Spotube-linux-x86_64.tar.xz | awk '{print $1}'`/" aur-struct/PKGBUILD
- name: Release to AUR
if: ${{ !inputs.dry_run }}
uses: KSXGitHub/github-actions-deploy-aur@v2.6.0
with:
pkgname: spotube-bin
pkgbuild: aur-struct/PKGBUILD
commit_username: ${{ secrets.AUR_USERNAME }}
commit_email: ${{ secrets.AUR_EMAIL }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: Updated to v${{ inputs.version }}

View File

@ -2,6 +2,7 @@
"cmake.configureOnOpen": false,
"cSpell.words": [
"Mpris",
"Spotube"
"Spotube",
"winget"
]
}