Skip to content

Merge pull request #12 from amber-dchat/main #14

Merge pull request #12 from amber-dchat/main

Merge pull request #12 from amber-dchat/main #14

Workflow file for this run

name: Build & Publish Desktop & Mobile application
on:
push:
branches:
- release
permissions: write-all
jobs:
mkrelease:
runs-on: ubuntu-latest
name: Create release
permissions:
contents: write
outputs:
upload_url: ${{ steps.get-u-url.outputs.result }}
release_id: ${{ steps.get-id.outputs.result }}
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Create Release
id: create-release
uses: actions/github-script@v7
env:
BRANCH: ${{ github.ref_name }}
with:
script: |
const fs = require("fs");
const version = require('./package.json').version;
const { data } = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: version,
name: `Amber DChat v${version}`,
body: String(fs.readFileSync("./latest.md")),
draft: true
});
return data
- name: Get Release Id
id: get-id
uses: actions/github-script@v7
env:
data: ${{ steps.create-release.outputs.result }}
with:
result-encoding: string
script: |
let data = process.env.data;
try {
data = JSON.parse(data);
console.log(data.id);
return data.id;
} catch (_) {
console.log(data.id);
return data.id;
}
- name: Get Upload Url
id: get-u-url
uses: actions/github-script@v7
env:
data: ${{ steps.create-release.outputs.result }}
with:
result-encoding: string
script: |
let data = process.env.data;
try {
data = JSON.parse(data);
return data.upload_url;
} catch (_) {
return data.upload_url;
}
publish-desktop:
needs: mkrelease
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: macos-latest
target: x86_64-apple-darwin
- os: macos-latest
target: aarch64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: windows-latest
target: aarch64-pc-windows-msvc
runs-on: ${{ matrix.os }}
name: Publish Desktop ${{ matrix.os }} ${{ matrix.target }}
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install Rust
run: |
rustup toolchain install nightly
rustup default nightly
rustup target add ${{ matrix.target }}
- name: Install Deps (Ubuntu)
if: matrix.os == 'ubuntu-latest'
run: |
echo "💿 Installing Tauri Requirements"
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-dev
- name: Install pnpm
run: npm i -g pnpm
- name: Install dependencies
run: pnpm install
- name: Build with Tauri Action
uses: tauri-apps/tauri-action@v0
with:
args: --target ${{ matrix.target }}
releaseId: ${{ needs.mkrelease.outputs.release_id }}
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish-mobile:
needs: mkrelease
strategy:
fail-fast: false
matrix:
include:
- args:
suffix: universal
- args: --target armv7
suffix: armv7
- args: --target aarch64
suffix: aarch64
- args: --target i686
suffix: i686
- args: --target x86_64
suffix: x86_64
runs-on: ubuntu-latest
name: Publish Mobile android-latest ${{ matrix.suffix }}-linux-android
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Setup Rust
run: |
rustup toolchain install nightly
rustup default nightly
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
- name: Setup NodeJS
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install pnpm
run: |
npm i -g pnpm
pnpm install
- name: Install Android + Tauri Requirements
run: |
echo "📱 Installing Android Requirements"
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
echo "💿 Installing Tauri Requirements"
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-dev
- name: Install Android Signature
run: node load.cjs
env:
jks: ${{ secrets.ANDROID_BASE64 }}
key: ${{ secrets.ANDROID_KEYSTORE }}
store_location: ${{ runner.temp }}/store.jks
- name: Build Tauri App (Android)
run: |
export CURRENT_DIR=$(pwd)
export NDK_HOME="$ANDROID_NDK_LATEST_HOME"
export JAVA_HOME="$JAVA_HOME_21_X64"
pnpm tauri android build --apk ${{ matrix.args }}
- name: Upload to Release
uses: shogo82148/actions-upload-release-asset@v1
with:
upload_url: ${{ needs.mkrelease.outputs.upload_url }}
asset_path: ./src-tauri/gen/android/app/build/outputs/apk/universal/release/app-universal-release.apk
asset_name: app-${{ matrix.suffix }}.apk
asset_content_type: application/octet-stream
github_token: ${{ secrets.GITHUB_TOKEN }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
undraft-release:
needs: [mkrelease, publish-desktop, publish-mobile]
name: Publish Release
runs-on: ubuntu-latest
steps:
- name: Undraft Release
uses: actions/github-script@v7
env:
BRANCH: ${{ github.ref_name }}
R_ID: ${{ needs.mkrelease.outputs.release_id }}
with:
script: |
github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: process.env.R_ID,
draft: false
});