Skip to content

Merge pull request #708 from jupyterlab/dependabot/npm_and_yarn/elect… #891

Merge pull request #708 from jupyterlab/dependabot/npm_and_yarn/elect…

Merge pull request #708 from jupyterlab/dependabot/npm_and_yarn/elect… #891

Workflow file for this run

name: Publish
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
publish:
strategy:
matrix:
cfg:
- { platform: linux, platform_name: Linux, os: ubuntu-latest, conda_platform: linux-64 }
- { platform: mac, platform_name: macOS, os: macos-latest, conda_platform: osx-64 }
- { platform: win, platform_name: Windows, os: windows-latest, conda_platform: win-64 }
name: '${{ matrix.cfg.platform_name }} installer'
runs-on: ${{ matrix.cfg.os }}
steps:
- uses: actions/checkout@v4
- uses: s-weigand/setup-conda@v1
- run: conda install --file ./workflow_env/conda-${{ matrix.cfg.conda_platform }}.lock -y
- name: Install node
uses: actions/setup-node@v3
with:
node-version: '14.x'
cache: 'yarn'
- name: Install dependencies
run: |
npm install --global yarn --prefer-offline
yarn install
- name: Check JupyterLab version match
run: |
yarn check_version_match
- name: Check Lint & Prettier
run: |
yarn lint:check
- name: Get package info
shell: bash
id: package-info
run: echo "version=$(python scripts/get_package_version.py)" >> $GITHUB_OUTPUT
- name: 'Find Release with tag v${{ steps.package-info.outputs.version}}'
uses: actions/github-script@v6
id: release-exists
env:
APP_VERSION: ${{ steps.package-info.outputs.version}}
with:
script: |
const releases = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo
})
const tagName = `v${process.env.APP_VERSION}`
const releaseWithTag = releases.data.find(release => release.tag_name === tagName && (release.draft || release.prerelease))
return releaseWithTag ? 'true' : 'false'
result-encoding: string
- name: Create Application Server Installer
run: |
yarn create_env_installer:${{ matrix.cfg.platform }}
# contents of tarball needs to be signed for notarization
- name: Codesign Application Server
if: matrix.cfg.platform == 'mac' && steps.release-exists.outputs.result == 'true'
env:
CSC_IDENTITY_AUTO_DISCOVERY: true
CSC_FOR_PULL_REQUEST: true
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
ENV_INSTALLER_KEYCHAIN_PASS: ${{ secrets.ENV_INSTALLER_KEYCHAIN_PASS }}
run: |
echo "Extracting env installer"
yarn extract_env_installer:${{ matrix.cfg.platform }}
echo $CSC_LINK | base64 -d -o certificate.p12
security create-keychain -p $ENV_INSTALLER_KEYCHAIN_PASS build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p $ENV_INSTALLER_KEYCHAIN_PASS build.keychain
security import certificate.p12 -k build.keychain -P $CSC_KEY_PASSWORD -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $ENV_INSTALLER_KEYCHAIN_PASS build.keychain
echo "Signing env binaries"
while read line; do /usr/bin/codesign --force --options=runtime --deep -s "Developer ID Application" ./env_installer/jlab_server_extracted/"$line" -v; done < ./env_installer/sign-osx-64.txt
rm certificate.p12
security delete-keychain build.keychain
# recreate tarball after signing contents
- name: Re-archive Application Server Installer
if: matrix.cfg.platform == 'mac' && steps.release-exists.outputs.result == 'true'
run: |
yarn compress_env_installer:${{ matrix.cfg.platform }}
rm -rf ./env_installer/jlab_server_extracted
- name: Create Application Installer for Test
env:
CSC_IDENTITY_AUTO_DISCOVERY: false # disable code signing if not release asset
run: |
yarn dist:${{ matrix.cfg.platform }}
if: steps.release-exists.outputs.result == 'false'
- name: Create Application Installer for Release
env:
CSC_IDENTITY_AUTO_DISCOVERY: true
CSC_FOR_PULL_REQUEST: true
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
CSC_LINK: ${{ secrets.CSC_LINK }}
run: |
yarn dist:${{ matrix.cfg.platform }}
if: steps.release-exists.outputs.result == 'true'
- name: Upload Debian Installer
if: matrix.cfg.platform == 'linux'
uses: actions/upload-artifact@v3
with:
name: debian-installer
path: |
dist/JupyterLab.deb
- name: Upload Fedora Installer
if: matrix.cfg.platform == 'linux'
uses: actions/upload-artifact@v3
with:
name: fedora-installer
path: |
dist/JupyterLab.rpm
- name: Upload macOS x64 Installer
if: matrix.cfg.platform == 'mac'
uses: actions/upload-artifact@v3
with:
name: mac-installer-x64
path: |
dist/JupyterLab-x64.dmg
- name: Upload macOS arm64 Installer
if: matrix.cfg.platform == 'mac'
uses: actions/upload-artifact@v3
with:
name: mac-installer-arm64
path: |
dist/JupyterLab-arm64.dmg
- name: Upload Windows Installer
if: matrix.cfg.platform == 'win'
uses: actions/upload-artifact@v3
with:
name: windows-installer
path: |
dist/JupyterLab-Setup.exe
- name: Upload Debian Installer as Release asset
if: matrix.cfg.platform == 'linux' && steps.release-exists.outputs.result == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.JLAB_APP_TOKEN }}
file: dist/JupyterLab.deb
asset_name: JupyterLab-Setup-Debian.deb
tag: v${{ steps.package-info.outputs.version}}
overwrite: true
- name: Upload Fedora Installer as Release asset
if: matrix.cfg.platform == 'linux' && steps.release-exists.outputs.result == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.JLAB_APP_TOKEN }}
file: dist/JupyterLab.rpm
asset_name: JupyterLab-Setup-Fedora.rpm
tag: v${{ steps.package-info.outputs.version}}
overwrite: true
- name: Upload macOS x64 Installer as Release asset
if: matrix.cfg.platform == 'mac' && steps.release-exists.outputs.result == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.JLAB_APP_TOKEN }}
file: dist/JupyterLab-x64.dmg
asset_name: JupyterLab-Setup-macOS-x64.dmg
tag: v${{ steps.package-info.outputs.version}}
overwrite: true
- name: Upload macOS arm64 Installer as Release asset
if: matrix.cfg.platform == 'mac' && steps.release-exists.outputs.result == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.JLAB_APP_TOKEN }}
file: dist/JupyterLab-arm64.dmg
asset_name: JupyterLab-Setup-macOS-arm64.dmg
tag: v${{ steps.package-info.outputs.version}}
overwrite: true
- name: Upload macOS x64 App as Release asset
if: matrix.cfg.platform == 'mac' && steps.release-exists.outputs.result == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.JLAB_APP_TOKEN }}
file: dist/JupyterLab-x64.zip
asset_name: JupyterLab-macOS-x64.zip
tag: v${{ steps.package-info.outputs.version}}
overwrite: true
- name: Upload macOS arm64 App as Release asset
if: matrix.cfg.platform == 'mac' && steps.release-exists.outputs.result == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.JLAB_APP_TOKEN }}
file: dist/JupyterLab-arm64.zip
asset_name: JupyterLab-macOS-arm64.zip
tag: v${{ steps.package-info.outputs.version}}
overwrite: true
- name: Upload Windows Installer as Release asset
if: matrix.cfg.platform == 'win' && steps.release-exists.outputs.result == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.JLAB_APP_TOKEN }}
file: dist/JupyterLab-Setup.exe
asset_name: JupyterLab-Setup-Windows.exe
tag: v${{ steps.package-info.outputs.version}}
overwrite: true
- name: Upload latest.yml Release asset
if: matrix.cfg.platform == 'win' && steps.release-exists.outputs.result == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.JLAB_APP_TOKEN }}
file: dist/latest.yml
asset_name: latest.yml
tag: v${{ steps.package-info.outputs.version}}
overwrite: true