Skip to content

Publish Release

Publish Release #34

name: Publish Release
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.target || 'all' }}
cancel-in-progress: true
permissions:
contents: write
pull-requests: write
on:
workflow_dispatch:
inputs:
new_version:
description: 'Provide the version for this release'
required: true
type: string
prev_tag:
description: 'The tag to compare the changelog to'
required: false
type: string
target:
description: 'Build only Target'
required: true
default: 'all'
type: choice
options:
- all
- ios
- android
- macos
- linux
- windows-exe
- windows-msix
custom_title:
description: 'You want a custom title for the release?'
required: false
type: string
schedule:
- cron: 0 1 * * 4
jobs:
run_checker:
runs-on: ubuntu-latest
name: Check latest commit
outputs:
should_run: ${{ inputs.new_version != null || steps.check-new-commits.outputs.has-new-commits }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # fetch all history and tags
- name: Check for new commits since last release
id: check-new-commits
shell: bash
run: |
if [ `git diff --name-only ${{ inputs.prev_tag || 'release-latest' }} -- app native .changes | wc -l` -ne 0 ]; then
echo "has-new-commits=true" >> $GITHUB_OUTPUT ;
else
echo "has-new-commits=false" >> $GITHUB_OUTPUT ;
fi
tags:
runs-on: ubuntu-latest
needs:
- run_checker
if: ${{ needs.run_checker.outputs.should_run != 'false' }}
# Map a step output to a job output
outputs:
tag: v${{ inputs.new_version || steps.version.outputs.version }}
version: ${{ inputs.new_version || steps.version.outputs.version }}
build_num: ${{ steps.build_num.outputs.build_num }}
targets: ${{ inputs.target || 'all' }}
release_title_prefix: ${{ inputs.custom_title || 'Release'}}
steps:
- id: version
# the suffix 0 allows us to provide up to 9 more hotfixes on the same day
run: echo "version=`date +1.%y.%-m%d0`" >> $GITHUB_OUTPUT
- id: build_num
run: echo "build_num=`date +%s`" >> $GITHUB_OUTPUT
build:
uses: ./.github/workflows/build-app.yml
needs:
- tags
with:
build_num: ${{ needs.tags.outputs.build_num }}
version: ${{ needs.tags.outputs.version }}
release_title: "${{ needs.tags.outputs.release_title_prefix }} ${{ needs.tags.outputs.tag }}"
release_tag: ${{ needs.tags.outputs.tag }}
targets: ${{ needs.tags.outputs.targets }}
release: true
release_env: 'release'
secrets: inherit
changelog:
uses: ./.github/workflows/build-changelog.yml
needs:
- tags
secrets: inherit
## ## ###### ###### ######## ####### ######## ########
### ### ## ## ## ## ## ## ## ## ## ##
#### #### ## ## ## ## ## ## ## ##
## ### ## ###### ###### ## ## ## ######## ######
## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ##
## ## ###### ###### ## ####### ## ## ########
microsoft-store:
runs-on: windows-latest
environment: release
needs:
- tags
- build
steps:
- uses: actions/download-artifact@v4
with:
name: Windows msix
- name: Create Archive
run: |
Rename-Item -Path acter-windows-${{ needs.tags.outputs.version }}.msix -NewName acter.msix
Compress-Archive -Path acter.msix acter.zip
- name: setup storebroker
run: |
Install-Module StoreBroker -Force
Import-Module StoreBroker
# do the submission
- name: submit to MSStore via StoreBroker
env:
TENANTID: ${{ secrets.AZURE_AD_TENANT_ID }}
CLIENTID: ${{ secrets.AZURE_AD_CLIENT_ID }}
CLIENTSECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }}
MS_STORE_APP_ID: ${{ secrets.MS_STORE_APP_ID }}
run: |
$DebugPreference = 'Continue'
# prepare te package
Write-Debug "Logging in"
# login with the StoreBroker
$sec = ConvertTo-SecureString $env:CLIENTSECRET -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $env:CLIENTID, $sec
Set-StoreBrokerAuthentication -TenantId $env:TENANTID -Credential $cred -Verbose
Write-Debug "Logged in. Preparing submission"
# create the submission and add new package
$sub = New-ApplicationSubmission -AppId $env:MS_STORE_APP_ID -Force -Verbose
$sub.applicationPackages | ForEach-Object { $_.fileStatus = "PendingDelete" }
$pkg = $sub.applicationPackages[0].PSObject.Copy()
$pkg.fileName = "acter.msix"
$pkg.fileStatus = "PendingUpload"
$pkg.PSObject.Properties.Remove("version")
$pkg.PSObject.Properties.Remove("id")
$sub.applicationPackages += $pkg
Write-Debug "Setting Submission ID"
Set-ApplicationSubmission -AppId $env:MS_STORE_APP_ID -UpdatedSubmission $sub
Write-Debug "Setting Submission Package"
Set-SubmissionPackage -PackagePath 'acter.zip' -UploadUrl ($sub.fileUploadUrl)
Write-Debug "Completing submission"
Complete-ApplicationSubmission -AppId $env:MS_STORE_APP_ID -SubmissionId ($sub.id)
Write-Debug "Submitted successfully"
######## ## ### ## ## ###### ######## ####### ######## ########
## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ## #### ## ## ## ## ## ## ##
######## ## ## ## ## ###### ## ## ## ######## ######
## ## ######### ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ##
## ######## ## ## ## ###### ## ####### ## ## ########
google-play-store:
runs-on: ubuntu-latest
environment: release
needs:
- tags
- build
steps:
- uses: actions/download-artifact@v4
with:
name: Android
# - uses: actions/download-artifact@v4
# with:
# name: Android-debug-symbols
- name: Release Build to playstore
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.PLAYSTORE_ACCOUNT_KEY }}
packageName: global.acter.a3
releaseName: ${{ needs.tags.outputs.tag }}
releaseFiles: app-release.aab
# debugSymbols: "*.symbols"
track: beta
status: completed
#### ####### ###### ### ######## ######## ###### ######## ####### ######## ########
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ## ###### ## ## ######## ######## ###### ## ## ## ######## ######
## ## ## ## ######### ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
#### ####### ###### ## ## ## ## ###### ## ####### ## ## ########
apple-store-ios:
runs-on: macos-latest
environment: release
needs:
- tags
- changelog
- build
steps:
- uses: actions/download-artifact@v4
with:
name: iOS
- uses: actions/download-artifact@v4
with:
name: Changelog
- uses: actions/setup-python@v5
with:
python-version: "3.11"
architecture: x64
- run: pip3 install codemagic-cli-tools
- name: Install App Store Connect Auth
env:
APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
run: |
mkdir private_keys
echo -n "$APPLE_API_KEY_BASE64" | base64 --decode --output "private_keys/AuthKey_$APPLE_API_KEY_ID.p8"
ls -ltas private_keys
- name: Publish to AppStore
env:
APP_STORE_CONNECT_KEY_IDENTIFIER: ${{ secrets.APPLE_API_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
shell: bash
run: |
app-store-connect publish --verbose --app-store --expire-build-submitted-for-review --platform=IOS --whats-new @file:CHANGELOG.md --path=*.ipa
- name: Clean up keychain and provisioning profile
if: ${{ always() }}
run: |
rm -rf private_keys
## ## ### ###### ### ######## ######## ###### ######## ####### ######## ########
### ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
#### #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ### ## ## ## ## ## ## ######## ######## ###### ## ## ## ######## ######
## ## ######### ## ######### ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ###### ## ## ## ## ###### ## ####### ## ## ########
apple-store-mac:
runs-on: macos-latest
environment: release
needs:
- tags
- build
- changelog
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: MacOS
- uses: actions/download-artifact@v4
with:
name: Changelog
- uses: actions/setup-python@v5
with:
python-version: "3.11"
architecture: x64
- run: pip3 install codemagic-cli-tools
- name: Install App Store Connect Auth
env:
APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
run: |
mkdir private_keys
echo -n "$APPLE_API_KEY_BASE64" | base64 --decode --output "private_keys/AuthKey_$APPLE_API_KEY_ID.p8"
ls -ltas private_keys
- name: Publish to AppStore
env:
APP_STORE_CONNECT_KEY_IDENTIFIER: ${{ secrets.APPLE_API_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
shell: bash
run: |
app-store-connect publish --verbose --app-store --expire-build-submitted-for-review --platform=MAC_OS --whats-new @file:CHANGELOG.md --path=*.app
- name: Clean up keychain and provisioning profile
if: ${{ always() }}
run: |
rm -rf private_keys
### ######## ###### ## ## ### ## ## ########
## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ######## ## ######### ## ## ## ## ########
######### ## ## ## ## ## ######### ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ###### ## ## ## ## ####### ## ##
publish_aur:
environment: release
needs:
- tags
- build
name: Publish AUR
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v4
with:
name: Linux x64
- name: Create PKGBUILD file
run: |
cp app/linux/packaging/aur/PKGBUILD PKGBUILD
VERSION=${{ needs.tags.outputs.version }}
DOWNLOAD_PATH='v${{ needs.tags.outputs.version }}\/acter-linux-x64-${{ needs.tags.outputs.version }}.tar.bz2'
MD5SUM=`md5sum acter-linux-x64-$VERSION.tar.bz2 | awk '{print $1}'`
echo "Version: $VERSION"
echo "Download Path: $DOWNLOAD_PATH"
echo "MD5Sum: $MD5SUM"
sed -i "s/%{{PKGNAME}}%/acter-bin/g" PKGBUILD
sed -i "s/%{{PKGNAME_CONFLICTS}}%/acter-nightly-bin/g" PKGBUILD
sed -i "s/%{{VERSION}}%/$VERSION/g" PKGBUILD
sed -i "s/%{{DOWNLOAD_PATH}}%/$DOWNLOAD_PATH/g" PKGBUILD
sed -i "s/%{{LINUX_MD5}}%/$MD5SUM/g" PKGBUILD
echo " --- Final PKGBUILD File "
cat PKGBUILD
- uses: KSXGitHub/[email protected]
name: Publish to AUR
with:
pkgname: acter-bin
pkgbuild: ./PKGBUILD
commit_username: Sari
commit_email: [email protected]
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: Updated to ${{ needs.tags.outputs.version }}
publish_aur_nightly:
environment: release
needs:
- tags
- build
name: Publish AUR nightly
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v4
with:
name: Linux x64
- name: Patch PKGBUILD file
run: |
cp app/linux/packaging/aur/PKGBUILD PKGBUILD
VERSION=${{ needs.tags.outputs.version }}
DOWNLOAD_PATH='v${{ needs.tags.outputs.version }}\/acter-linux-x64-${{ needs.tags.outputs.version }}.tar.bz2'
MD5SUM=`md5sum acter-linux-x64-$VERSION.tar.bz2 | awk '{print $1}'`
echo "Version: $VERSION"
echo "Download Path: $DOWNLOAD_PATH"
echo "MD5Sum: $MD5SUM"
sed -i "s/%{{PKGNAME}}%/acter-nightly-bin/g" PKGBUILD
sed -i "s/%{{PKGNAME_CONFLICTS}}%/acter-bin/g" PKGBUILD
sed -i "s/%{{VERSION}}%/$VERSION/g" PKGBUILD
sed -i "s/%{{DOWNLOAD_PATH}}%/$DOWNLOAD_PATH/g" PKGBUILD
sed -i "s/%{{LINUX_MD5}}%/$MD5SUM/g" PKGBUILD
echo " --- Final PKGBUILD File "
cat PKGBUILD
- uses: KSXGitHub/[email protected]
name: Publish to AUR
with:
pkgname: acter-nightly-bin
pkgbuild: ./PKGBUILD
commit_username: Sari
commit_email: [email protected]
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: Updated to ${{ needs.tags.outputs.tag }}
###### #### ######## ## ## ## ## ######## ######## ## ## ######## ## #### ###### ## ##
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
## #### ## ## ######### ## ## ######## ######## ## ## ######## ## ## ###### #########
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
###### #### ## ## ## ####### ######## ## ####### ######## ######## #### ###### ## ##
publish:
environment: release
runs-on: ubuntu-latest
name: Publish
# if: ${{ github.event.schedule }}
needs:
- tags
- build
- changelog
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/download-artifact@v4
with:
name: Changelog
- name: Configure git
run: | # make sure we have the tags and all
git fetch --prune --unshallow --tags
git config --global user.name 'Sari'
git config --global user.email '[email protected]'
- name: Clear old docs
continue-on-error: true
run: |
git rm --ignore-unmatch .changes/*.md
- name: Tag for release
run: |
echo "Add release ${{ needs.tags.outputs.tag }}"
git checkout -b ci/release-${{ needs.tags.outputs.tag }}
git commit -m "Releasing ${{ needs.tags.outputs.tag }}"
git tag ${{ needs.tags.outputs.tag }}
git push origin ci/release-${{ needs.tags.outputs.tag }} ${{ needs.tags.outputs.tag }}
- name: Create Pull Request
id: cpr
run: |
gh pr create -B main -H ci/release-$TAG --title "Releasing $TAG" --body "Release $TAG auto PR." -a gnunicorn -l minor
gh pr merge --auto --merge --delete-branch ci/release-$TAG
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG: ${{ needs.tags.outputs.tag }}
- name: Release
id: create_release
uses: softprops/action-gh-release@v2
with:
# publish this full release now
draft: true
generate_release_notes: false
name: "${{ needs.tags.outputs.release_title_prefix }} ${{ needs.tags.outputs.tag }}"
tag_name: ${{ needs.tags.outputs.tag }}
# body_path: CHANGELOG.md
prerelease: false
files: CHANGELOG.md
- uses: eregon/publish-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
release_id: ${{ steps.create_release.outputs.id }}