Skip to content

Build

Build #3

Workflow file for this run

name: Build
on:
push:
branches:
- main
workflow_dispatch:
jobs:
dependencies:
name: Create draft release and install dependencies
runs-on: ubuntu-latest
outputs:
version: v${{steps.version.outputs.prop}}
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- name: Upgrade NPM
run: npm install -g npm
- name: Install dependencies
run: npm ci
- name: Get version
id: version
uses: notiz-dev/github-action-json-property@release
with:
path: 'package.json'
prop_path: 'version'
- name: Create Release
id: create_release
uses: softprops/action-gh-release@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
name: v${{steps.version.outputs.prop}}
tag_name: v${{steps.version.outputs.prop}}
draft: true
prerelease: false
build-webui:
name: Build WebUI
needs: dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Pre-build
run: npm run-script prebuild:webui
- name: Build
run: npm run build --prod
- name: Post-build
run: npm run-script postbuild:webui
- name: Create zip
run: |
mv ./dist/ ./web/
zip -r release.zip ./web/
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.dependencies.outputs.upload_url }}
asset_path: ./release.zip
asset_name: Transmissionic-webui-${{ needs.dependencies.outputs.version }}.zip
asset_content_type: application/zip
build-electron-linux:
name: Build Electron Linux
needs: dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- name: Install dependencies
run: |
npm ci
- name: Build and sync web assets
run: |
npm run build --prod
npx cap sync @capacitor-community/electron
npx cap copy @capacitor-community/electron
- name: Post-build
run: npm run-script postbuild:electron
- name: Install electron dependencies
working-directory: ./electron
run: npm ci
- name: Build and publish electron
working-directory: ./electron
run: npm run-script electron:publish-linux
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-electron-win:
name: Build Electron Windows
needs: dependencies
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- name: Install dependencies
run: |
npm ci
- name: Build and sync web assets
run: |
npm run build --prod
npx cap sync @capacitor-community/electron
npx cap copy @capacitor-community/electron
- name: Post-build
run: npm run-script postbuild:electron
- name: Install electron dependencies
working-directory: ./electron
run: npm ci
- name: Build and publish electron
working-directory: ./electron
run: npm run-script electron:publish-windows
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-electron-mac:
name: Build Electron macOS
needs: dependencies
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- name: Install dependencies
run: |
npm ci
- name: Build and sync web assets
run: |
npm run build --prod
npx cap sync @capacitor-community/electron
npx cap copy @capacitor-community/electron
- name: Post-build
run: npm run-script postbuild:electron
- name: Install electron dependencies
working-directory: ./electron
run: npm ci
- name: Build and publish electron
working-directory: ./electron
run: npm run-script electron:publish-mac
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-android:
name: Build Android
needs: dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '11'
- name: Install dependencies
run: |
npm ci
- name: Build and sync web assets
run: |
npm run build --prod
npx cap sync android
npx cap copy android
- name: Build APK
working-directory: ./android
run: |
chmod +x gradlew
./gradlew build
- name: Build Bundle
working-directory: ./android
run: |
chmod +x gradlew
./gradlew bundleRelease
- uses: ilharp/sign-android-release@v1
name: Sign APK
id: sign_apk
with:
releaseDir: ./android/app/build/outputs/apk/release
signingKey: ${{ secrets.SIGNING_KEY }}
keyAlias: ${{ secrets.ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
buildToolsVersion: 33.0.0
- uses: ilharp/sign-android-release@v1
name: Sign Bundle
id: sign_bundle
with:
releaseDir: ./android/app/build/outputs/bundle/release
signingKey: ${{ secrets.SIGNING_KEY }}
keyAlias: ${{ secrets.ALIAS }}
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
buildToolsVersion: 33.0.0
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.dependencies.outputs.upload_url }}
asset_path: ${{steps.sign_apk.outputs.signedFile}}
asset_name: Transmissionic-android-${{ needs.dependencies.outputs.version }}.apk
asset_content_type: application/zip
- name: Upload Release Bundle
uses: actions/upload-artifact@v3
with:
name: Transmissionic-android-${{ needs.dependencies.outputs.version }}.aab
path: ${{steps.sign_bundle.outputs.signedFile}}
retention-days: 30
build-ios:
name: Build iOS
needs: dependencies
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
- name: Install dependencies
run: |
npm ci
- name: Build and sync web assets
run: |
npm run build --prod
npx cap sync ios
npx cap copy ios
- name: Build IPA
working-directory: ./ios/App
run: |
xcodebuild -sdk iphoneos -workspace App.xcworkspace/ -scheme App -configuration Release CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED="NO" CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"
mkdir -p Payload
mv ~/Library/Developer/Xcode/DerivedData/App-*/Build/Products/Release-iphoneos/App.app Payload
zip -r app.ipa Payload
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.dependencies.outputs.upload_url }}
asset_path: ./ios/App/app.ipa
asset_name: Transmissionic-ios-${{ needs.dependencies.outputs.version }}.ipa
asset_content_type: application/zip