Skip to content

Build & Release

Build & Release #237

name: Build & Release
on:
push:
tags:
- '**'
pull_request:
branches:
- '**'
concurrency:
# SHA is added to the end if on `main` to let all main workflows run
group: ${{ github.ref }}-${{ github.workflow }}-${{ github.event_name }}-${{ github.ref == 'refs/heads/main' && github.sha || '' }}
cancel-in-progress: true
permissions:
id-token: write
contents: write
jobs:
build_mac:
name: Build Mac Installer
runs-on: macos-latest
steps:
- uses: Chia-Network/actions/clean-workspace@main
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup Node 18.16
uses: actions/setup-node@v3
with:
node-version: '18.16'
- name: install dmg-license
run: npm i dmg-license
- name: npm install
run: |
node --version
npm install
- name: Import Apple installer signing certificate
uses: Apple-Actions/import-codesign-certs@v1
with:
p12-file-base64: ${{ secrets.APPLE_DEV_ID_APP }}
p12-password: ${{ secrets.APPLE_DEV_ID_APP_PASS }}
- name: Build electron app
env:
CSC_FOR_PULL_REQUEST: "true"
run: npm run electron:package:mac
- name: Notarize
run: |
DMG_FILE=$(find ${{ github.workspace }}/dist/ -type f -name '*.dmg')
npm install -g notarize-cli
notarize-cli \
--file="$DMG_FILE" \
--bundle-id net.chia.climate-tokenization-engine-ui \
--username "${{ secrets.APPLE_NOTARIZE_USERNAME }}" \
--password "${{ secrets.APPLE_NOTARIZE_PASSWORD }}"
- name: Upload Mac Installer
uses: actions/upload-artifact@v3
with:
name: mac-installer
path: ${{ github.workspace }}/dist/*.dmg
build_windows:
name: Build Windows Installer
runs-on: windows-2019
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup Node 18.16
uses: actions/setup-node@v3
with:
node-version: '18.16'
- name: npm install
run: |
node --version
npm install
- name: Build electron app
run: npm run electron:package:win
# Windows Code Signing
- name: Get installer name for signing
shell: bash
run: |
FILE=$(find dist -type f -maxdepth 1 -name '*.exe')
echo "Installer file is $FILE"
echo "INSTALLER_FILE=$FILE" >> "$GITHUB_ENV"
- name: Sign windows artifacts
uses: chia-network/actions/digicert/windows-sign@main
with:
sm_api_key: ${{ secrets.SM_API_KEY }}
sm_client_cert_file_b64: ${{ secrets.SM_CLIENT_CERT_FILE_B64 }}
sm_client_cert_password: ${{ secrets.SM_CLIENT_CERT_PASSWORD }}
sm_code_signing_cert_sha1_hash: ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }}
file: "${{ github.workspace }}/${{ env.INSTALLER_FILE }}"
- name: Upload Windows Installer
uses: actions/upload-artifact@v3
with:
name: windows-installer
path: "${{ github.workspace }}/${{ env.INSTALLER_FILE }}"
build_linux:
name: Build Linux Installer
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup Node 18.16
uses: actions/setup-node@v3
with:
node-version: '18.16'
- name: npm install
run: |
node --version
npm install
- name: Build electron app
run: npm run electron:package:linux
- name: Upload Linux Installer
uses: actions/upload-artifact@v3
with:
name: linux-installer
path: ${{ github.workspace }}/dist/*.deb
build_web:
name: Build Web App
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup Node 18.16
uses: actions/setup-node@v3
with:
node-version: '18.16'
- name: Install Husky
run: npm install --save-dev husky
- name: npm install and build
run: |
node --version
npm install
npm run build
- name: Create .tar.gz of the web build
run: tar -cvzf climate-tokenization-engine-ui-web-build.tar.gz build
- name: Upload build artifact
uses: actions/upload-artifact@v3
with:
name: climate-tokenization-engine-ui-web-build
path: climate-tokenization-engine-ui-web-build.tar.gz
release:
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
needs:
- build_mac
- build_windows
- build_linux
steps:
- name: Download Windows artifacts
uses: actions/download-artifact@v3
with:
name: windows-installer
path: windows-installer
- name: Download MacOS artifacts
uses: actions/download-artifact@v3
with:
name: mac-installer
path: mac-installer
- name: Download Linux artifacts
uses: actions/download-artifact@v3
with:
name: linux-installer
path: linux-installer
- name: Download Web artifact
uses: actions/download-artifact@v3
with:
name: climate-tokenization-engine-ui-web-build
path: climate-tokenization-engine-ui-web-build
- name: Get Filenames
run: |
DMG_FILE=$(find ${{ github.workspace }}/mac-installer/ -type f -name '*.dmg')
DEB_FILE=$(find ${{ github.workspace }}/linux-installer/ -type f -name '*.deb')
EXE_FILE=$(find ${{ github.workspace }}/windows-installer/ -type f -name '*.exe')
WEB_FILE=$(find ${{ github.workspace }}/climate-tokenization-engine-ui-web-build/ -type f -name '*.tar.gz')
echo "DMG_FILE=$DMG_FILE" >>$GITHUB_ENV
echo "DEB_FILE=$DEB_FILE" >>$GITHUB_ENV
echo "EXE_FILE=$EXE_FILE" >>$GITHUB_ENV
echo "WEB_FILE=$WEB_FILE" >>$GITHUB_ENV
- name: Release
uses: softprops/[email protected]
with:
files: |
${{ env.DMG_FILE }}
${{ env.DEB_FILE }}
${{ env.EXE_FILE }}
${{ env.WEB_FILE }}
- name: Get repo name
id: repo-name
run: |
echo "REPO_NAME=$(echo "$GITHUB_REPOSITORY" | cut -d "/" -f 2)" >>$GITHUB_OUTPUT
- name: Get tag name
id: tag-name
run: |
echo "TAGNAME=$(echo $GITHUB_REF | cut -d / -f 3)" >>$GITHUB_OUTPUT
- name: Gets JWT Token from GitHub
uses: Chia-Network/actions/github/jwt@main
- name: Trigger apt repo update
run: |
curl -s -XPOST -H "Authorization: Bearer ${{ env.JWT_TOKEN }}" --data '{"climate_tokenization_repo":"${{ steps.repo-name.outputs.REPO_NAME }}","application_name":"[\"climate-tokenization-engine-ui\"]","release_version":"${{ steps.tag-name.outputs.TAGNAME }}","add_debian_version":"false","arm64":"false"}' ${{ secrets.GLUE_API_URL }}/api/v1/climate-tokenization/${{ github.sha }}/start
curl -s -XPOST -H "Authorization: Bearer ${{ env.JWT_TOKEN }}" --data '{"climate_tokenization_repo":"${{ steps.repo-name.outputs.REPO_NAME }}","application_name":"[\"climate-tokenization-engine-ui\"]","release_version":"${{ steps.tag-name.outputs.TAGNAME }}","add_debian_version":"false","arm64":"false"}' ${{ secrets.GLUE_API_URL }}/api/v1/climate-tokenization/${{ github.sha }}/success/deploy