Skip to content

📦 Package Workflow #191

📦 Package Workflow

📦 Package Workflow #191

name: 📦 Package Workflow
# Workflow dispatch for packaging an electron executable
# TODO: Update actions running on Node 16 (all workflows)
on:
workflow_dispatch:
inputs:
setting:
type: choice
options:
- "home"
- "clinic"
default: "home"
required: true
description: Package the app for 'home' or 'clinic' use
os:
type: choice
options:
- "All"
- "Windows"
- "macOS"
- "Linux"
default: "All"
required: true
description: Which OS to package
jobs:
package-and-upload:
name: Package and Upload
runs-on: ${{ matrix.os }}
# Run action for [home/clinic] in [windows/macOS/ubuntu] based on user input
strategy:
matrix:
os: ${{
(github.event.inputs.os == 'All' && fromJSON('["ubuntu-latest", "macOS-13", "windows-latest"]')) ||
(github.event.inputs.os == 'Windows' && fromJSON('["windows-latest"]')) ||
(github.event.inputs.os == 'macOS' && fromJSON('["macOS-13"]')) ||
(github.event.inputs.os == 'Linux' && fromJSON('["ubuntu-latest"]')) }}
fail-fast: false # A failed build will not end the other matrix jobs
steps:
# Set up runner
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm
- name: 🐍 Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.12
# Install dependencies and set up environment
- name: 🅿️ Install Python tools
run: pip install setuptools
- name: 📥 Install Dependencies
run: npm ci
# Set up the environment
- name: 🔃 Load .env file (.env.${{github.event.inputs.setting}})
uses: xom9ikk/dotenv@v2
with:
path: ./env
mode: ${{github.event.inputs.setting}}
# Package the app and make the installers
- name: 📦 Make app installer - Windows
if: startsWith(matrix.os, 'windows')
run: npm run make:windows
- name: 📦 Make app installer - Mac
if: startsWith(matrix.os, 'mac')
run: npm run make:mac
- name: 📦 Make app installer - Linux
if: startsWith(matrix.os, 'ubuntu')
run: npm run make:linux
# Get package info
- name: Get package name and version
id: package_info
run: |
echo "name=$(cat package.json | jq -r '.name')" >> $GITHUB_OUTPUT
echo "version=$(cat package.json | jq -r '.version')" >> $GITHUB_OUTPUT
shell: bash
# Upload installers to github action
# TODO @brown-ccv #247: Can we use the publish command here?
- name: ⬆ Upload installer - Windows
uses: actions/upload-artifact@v3
if: startsWith(matrix.os, 'windows')
with:
name: ${{ format('win-installer-{0}', github.event.inputs.setting) }}
path: out/make/squirrel.windows/x64/${{ steps.package_info.outputs.name }}-${{ steps.package_info.outputs.version }} Setup.exe
if-no-files-found: error
- name: ⬆ Upload installer - Mac
uses: actions/upload-artifact@v3
if: startsWith(matrix.os, 'mac')
with:
name: ${{ format('mac-installer-{0}', github.event.inputs.setting) }}
path: out/make/${{ steps.package_info.outputs.name }}-${{ steps.package_info.outputs.version }}-universal.dmg
if-no-files-found: error
- name: ⬆ Upload installer - Linux
uses: actions/upload-artifact@v3
if: startsWith(matrix.os, 'ubuntu')
with:
name: ${{ format('linux-installer-{0}', github.event.inputs.setting) }}
path: out/make/deb/x64/${{ steps.package_info.outputs.name }}_${{ steps.package_info.outputs.version }}_amd64.deb
if-no-files-found: error