electron test code with error loading (#3531) #420
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build-test-publish-apps | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
release: | |
types: [published] | |
schedule: | |
- cron: '0 4 * * *' | |
# Daily at 04:00 AM UTC | |
# Will checkout the last commit from the default branch (main as of 2023-10-04) | |
env: | |
CUT_RELEASE_PR: ${{ github.event_name == 'pull_request' && (contains(github.event.pull_request.title, 'Cut release v')) }} | |
BUILD_RELEASE: ${{ github.event_name == 'release' || github.event_name == 'schedule' || github.event_name == 'pull_request' && (contains(github.event.pull_request.title, 'Cut release v')) }} | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
prepare-json-files: | |
runs-on: ubuntu-22.04 # seperate job on Ubuntu for easy string manipulations (compared to Windows) | |
outputs: | |
version: ${{ steps.export_version.outputs.version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'yarn' | |
- name: Set nightly version | |
if: github.event_name == 'schedule' | |
run: | | |
VERSION=$(date +'%-y.%-m.%-d') yarn bump-jsons | |
# TODO: see if we need to inject updater nightly URL here https://dl.zoo.dev/releases/modeling-app/nightly/last_update.json | |
# TODO: see if we ned to add updater test URL here https://dl.zoo.dev/releases/modeling-app/updater-test/last_update.json | |
- uses: actions/upload-artifact@v3 | |
if: ${{ github.event_name == 'schedule' || env.CUT_RELEASE_PR == 'true' }} | |
with: | |
path: | | |
package.json | |
- id: export_version | |
run: echo "version=`cat package.json | jq -r '.version'`" >> "$GITHUB_OUTPUT" | |
build-test-app-macos: | |
needs: [prepare-json-files] | |
runs-on: macos-14 | |
env: | |
APPLE_ID: ${{ secrets.APPLE_ID }} | |
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} | |
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | |
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} | |
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v3 | |
if: github.event_name == 'schedule' | |
- name: Copy updated .json files | |
if: github.event_name == 'schedule' | |
run: | | |
ls -l artifact | |
cp artifact/package.json package.json | |
- name: Sync node version and setup cache | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'yarn' # Set this to npm, yarn or pnpm. | |
- run: yarn install | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: './src/wasm-lib' | |
- name: Run build:wasm | |
run: "yarn build:wasm${{ env.BUILD_RELEASE == 'true' && '-dev' || ''}}" | |
# TODO: sign the app (and updater bundle potentially) | |
- name: Add signing certificate | |
if: ${{ env.BUILD_RELEASE == 'true' }} | |
run: chmod +x add-osx-cert.sh && ./add-osx-cert.sh | |
- name: Build the app for arm64 | |
run: "yarn electron-forge make" | |
- name: Build the app for x64 | |
run: "yarn electron-forge make --arch x64" | |
- name: List artifacts | |
run: "ls -R out/make" | |
# TODO: add the 'Build for Mac TestFlight (nightly)' stage back | |
- uses: actions/upload-artifact@v3 | |
with: | |
path: "out/make/*/*/*/*" | |
build-test-app-windows: | |
needs: [prepare-json-files] | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v3 | |
- name: Copy updated .json files | |
if: github.event_name == 'schedule' | |
run: | | |
ls -l artifact | |
cp artifact/package.json package.json | |
- name: Sync node version and setup cache | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'yarn' # Set this to npm, yarn or pnpm. | |
- run: yarn install | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: './src/wasm-lib' | |
- name: Run build:wasm manually | |
shell: bash | |
env: | |
MODE: ${{ env.BUILD_RELEASE == 'true' && '--release' || '--debug' }} | |
run: | | |
mkdir src/wasm-lib/pkg; cd src/wasm-lib | |
echo "building with ${{ env.MODE }}" | |
npx wasm-pack build --target web --out-dir pkg ${{ env.MODE }} | |
cd ../../ | |
cp src/wasm-lib/pkg/wasm_lib_bg.wasm public | |
- name: Prepare certificate and variables (Windows only) | |
if: ${{ env.BUILD_RELEASE == 'true' }} | |
run: | | |
echo "${{secrets.SM_CLIENT_CERT_FILE_B64 }}" | base64 --decode > /d/Certificate_pkcs12.p12 | |
cat /d/Certificate_pkcs12.p12 | |
echo "::set-output name=version::${GITHUB_REF#refs/tags/v}" | |
echo "SM_HOST=${{ secrets.SM_HOST }}" >> "$GITHUB_ENV" | |
echo "SM_API_KEY=${{ secrets.SM_API_KEY }}" >> "$GITHUB_ENV" | |
echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV" | |
echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.SM_CLIENT_CERT_PASSWORD }}" >> "$GITHUB_ENV" | |
echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH | |
echo "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" >> $GITHUB_PATH | |
echo "C:\Program Files\DigiCert\DigiCert One Signing Manager Tools" >> $GITHUB_PATH | |
shell: bash | |
- name: Setup certicate with SSM KSP (Windows only) | |
if: ${{ env.BUILD_RELEASE == 'true' }} | |
run: | | |
curl -X GET https://one.digicert.com/signingmanager/api-ui/v1/releases/smtools-windows-x64.msi/download -H "x-api-key:%SM_API_KEY%" -o smtools-windows-x64.msi | |
msiexec /i smtools-windows-x64.msi /quiet /qn | |
smksp_registrar.exe list | |
smctl.exe keypair ls | |
C:\Windows\System32\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user | |
smksp_cert_sync.exe | |
shell: cmd | |
- name: Build the app for x64 | |
run: "yarn electron-forge make --arch x64" | |
- name: Build the app for arm64 | |
run: "yarn electron-forge make --arch arm64" | |
- name: List artifacts | |
run: "ls -R out/make" | |
- name: Sign using Signtool | |
if: ${{ env.BUILD_RELEASE == 'true' }} | |
env: | |
THUMBPRINT: "F4C9A52FF7BC26EE5E054946F6B11DEEA94C748D" | |
X64_FILE: "D:\\a\\modeling-app\\modeling-app\\out\\make\\squirrel.windows\\x64\\Zoo Modeling App-*Setup.exe" | |
ARM64_FILE: "D:\\a\\modeling-app\\modeling-app\\out\\make\\squirrel.windows\\arm64\\Zoo Modeling App-*Setup.exe" | |
run: | | |
signtool.exe sign /sha1 ${{ env.THUMBPRINT }} /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 "${{ env.X64_FILE }}" | |
signtool.exe verify /v /pa "${{ env.X64_FILE }}" | |
signtool.exe sign /sha1 ${{ env.THUMBPRINT }} /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 "${{ env.ARM64_FILE }}" | |
signtool.exe verify /v /pa "${{ env.ARM64_FILE }}" | |
- uses: actions/upload-artifact@v3 | |
with: | |
path: "out/make/*/*/*" | |
# TODO: Run e2e tests | |
build-test-app-ubuntu: | |
needs: [prepare-json-files] | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v3 | |
if: github.event_name == 'schedule' | |
- name: Copy updated .json files | |
if: github.event_name == 'schedule' | |
run: | | |
ls -l artifact | |
cp artifact/package.json package.json | |
- name: Sync node version and setup cache | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'yarn' # Set this to npm, yarn or pnpm. | |
- run: yarn install | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: './src/wasm-lib' | |
- name: Run build:wasm | |
run: "yarn build:wasm${{ env.BUILD_RELEASE == 'true' && '-dev' || ''}}" | |
- name: Build the app for arm64 | |
run: "yarn electron-forge make --arch arm64" | |
- name: Build the app for x64 | |
run: "yarn electron-forge make --arch x64" | |
- name: List artifacts | |
run: "ls -R out/make" | |
# TODO: add the 'Build for Mac TestFlight (nightly)' stage back | |
# TODO: sign the app (and updater bundle potentially) | |
- uses: actions/upload-artifact@v3 | |
with: | |
path: "out/make/*/*/*" | |
publish-apps-release: | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: write | |
if: ${{ github.event_name == 'release' || github.event_name == 'schedule' }} | |
needs: [prepare-json-files, build-test-app-macos, build-test-app-windows, build-test-app-ubuntu] | |
env: | |
VERSION_NO_V: ${{ needs.prepare-json-files.outputs.version }} | |
VERSION: ${{ github.event_name == 'release' && format('v{0}', needs.prepare-json-files.outputs.version) || needs.prepare-json-files.outputs.version }} | |
PUB_DATE: ${{ github.event_name == 'release' && github.event.release.created_at || github.event.repository.updated_at }} | |
NOTES: ${{ github.event_name == 'release' && github.event.release.body || format('Nightly build, commit {0}', github.sha) }} | |
BUCKET_DIR: ${{ github.event_name == 'release' && 'dl.kittycad.io/releases/modeling-app' || 'dl.kittycad.io/releases/modeling-app/nightly' }} | |
WEBSITE_DIR: ${{ github.event_name == 'release' && 'dl.zoo.dev/releases/modeling-app' || 'dl.zoo.dev/releases/modeling-app/nightly' }} | |
URL_CODED_NAME: ${{ github.event_name == 'schedule' && 'Zoo%20Modeling%20App%20%28Nightly%29' || 'Zoo%20Modeling%20App' }} | |
steps: | |
- uses: actions/download-artifact@v3 | |
- name: Generate the update static endpoint | |
run: | | |
ls -l artifact/*/*oo* | |
DARWIN_SIG=`cat artifact/macos/*.app.tar.gz.sig` | |
WINDOWS_X86_64_SIG=`cat artifact/msi/*x64*.msi.zip.sig` | |
WINDOWS_AARCH64_SIG=`cat artifact/msi/*arm64*.msi.zip.sig` | |
RELEASE_DIR=https://${WEBSITE_DIR}/${VERSION} | |
jq --null-input \ | |
--arg version "${VERSION}" \ | |
--arg pub_date "${PUB_DATE}" \ | |
--arg notes "${NOTES}" \ | |
--arg darwin_sig "$DARWIN_SIG" \ | |
--arg darwin_url "$RELEASE_DIR/macos/${{ env.URL_CODED_NAME }}.app.tar.gz" \ | |
--arg windows_x86_64_sig "$WINDOWS_X86_64_SIG" \ | |
--arg windows_x86_64_url "$RELEASE_DIR/msi/${{ env.URL_CODED_NAME }}_${VERSION_NO_V}_x64_en-US.msi.zip" \ | |
--arg windows_aarch64_sig "$WINDOWS_AARCH64_SIG" \ | |
--arg windows_aarch64_url "$RELEASE_DIR/msi/${{ env.URL_CODED_NAME }}_${VERSION_NO_V}_arm64_en-US.msi.zip" \ | |
'{ | |
"version": $version, | |
"pub_date": $pub_date, | |
"notes": $notes, | |
"platforms": { | |
"darwin-x86_64": { | |
"signature": $darwin_sig, | |
"url": $darwin_url | |
}, | |
"darwin-aarch64": { | |
"signature": $darwin_sig, | |
"url": $darwin_url | |
}, | |
"windows-x86_64": { | |
"signature": $windows_x86_64_sig, | |
"url": $windows_x86_64_url | |
}, | |
"windows-aarch64": { | |
"signature": $windows_aarch64_sig, | |
"url": $windows_aarch64_url | |
} | |
} | |
}' > last_update.json | |
cat last_update.json | |
- name: Generate the download static endpoint | |
run: | | |
RELEASE_DIR=https://${WEBSITE_DIR}/${VERSION} | |
jq --null-input \ | |
--arg version "${VERSION}" \ | |
--arg pub_date "${PUB_DATE}" \ | |
--arg notes "${NOTES}" \ | |
--arg darwin_url "$RELEASE_DIR/dmg/${{ env.URL_CODED_NAME }}_${VERSION_NO_V}_universal.dmg" \ | |
--arg windows_x86_64_url "$RELEASE_DIR/msi/${{ env.URL_CODED_NAME }}_${VERSION_NO_V}_x64_en-US.msi" \ | |
--arg windows_aarch64_url "$RELEASE_DIR/msi/${{ env.URL_CODED_NAME }}_${VERSION_NO_V}_arm64_en-US.msi" \ | |
'{ | |
"version": $version, | |
"pub_date": $pub_date, | |
"notes": $notes, | |
"platforms": { | |
"dmg-universal": { | |
"url": $darwin_url | |
}, | |
"msi-x86_64": { | |
"url": $windows_x86_64_url | |
}, | |
"msi-aarch64": { | |
"url": $windows_aarch64_url | |
} | |
} | |
}' > last_download.json | |
cat last_download.json | |
- name: Authenticate to Google Cloud | |
uses: 'google-github-actions/[email protected]' | |
with: | |
credentials_json: '${{ secrets.GOOGLE_CLOUD_DL_SA }}' | |
- name: Set up Google Cloud SDK | |
uses: google-github-actions/[email protected] | |
with: | |
project_id: kittycadapi | |
- name: Upload release files to public bucket | |
uses: google-github-actions/[email protected] | |
with: | |
path: artifact | |
glob: '*/Zoo*' | |
parent: false | |
destination: ${{ env.BUCKET_DIR }}/${{ env.VERSION }} | |
- name: Upload update endpoint to public bucket | |
uses: google-github-actions/[email protected] | |
with: | |
path: last_update.json | |
destination: ${{ env.BUCKET_DIR }} | |
- name: Upload download endpoint to public bucket | |
uses: google-github-actions/[email protected] | |
with: | |
path: last_download.json | |
destination: ${{ env.BUCKET_DIR }} | |
- name: Upload release files to Github | |
if: ${{ github.event_name == 'release' }} | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: 'artifact/*/Zoo*' | |
announce_release: | |
needs: [publish-apps-release] | |
runs-on: ubuntu-22.04 | |
if: github.event_name == 'release' | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install requests | |
- name: Announce Release | |
env: | |
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} | |
RELEASE_VERSION: ${{ github.event.release.tag_name }} | |
RELEASE_BODY: ${{ github.event.release.body}} | |
run: python public/announce_release.py |