Test and create release (when run manually) #1392
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
# This Source Code Form is subject to the terms of the Mozilla Public | |
# License, v. 2.0. If a copy of the MPL was not distributed with this | |
# file, You can obtain one at http://mozilla.org/MPL/2.0/. | |
# | |
# Copyright (c) 2011-2021 ETH Zurich. | |
name: Test and create release (when run manually) | |
on: | |
push: # run this workflow on every push | |
pull_request: # run this workflow on every pull_request | |
workflow_dispatch: # allow to manually trigger this workflow | |
inputs: | |
type: | |
type: choice | |
description: 'Specifies whether a stable release, nightly release or release candidate should be triggered.' | |
required: true | |
default: 'nightly' | |
options: | |
- stable | |
- nightly | |
- rc | |
viperserver_tag_name: | |
description: 'Tag name of ViperServer release from which server JAR should be downloaded' | |
required: true | |
boogie_tag_name: | |
description: 'Tag name of Boogie release from which the Boogie binaries should be downloaded. Can be set to be "latest"' | |
required: true | |
default: 'latest' | |
z3_version: | |
description: 'Z3 version that should be downloaded and included in a release' | |
required: true | |
default: '4.8.7' | |
tag_name: | |
description: 'Tag name for stable release.' | |
required: true | |
default: '-' | |
release_name: | |
description: 'Release title for stable release.' | |
required: true | |
default: '-' | |
# note that release-candidate builds are treated like 'stable' builds for now except that there is no deployment to the marketplaces in the end. | |
# in the future, this should be changed such that release-candidates result in a prerelease (like nightly builds). | |
# the following env variables configure the behavior of this workflow | |
# in particular, they control whether Viper-IDE is tested against certain ViperTools and a ViperServer JAR on push and pull requests | |
# this is particularly useful during debugging / testing as a new Viper-IDE release is not necessary for every change to the ViperServer JAR | |
env: | |
TEST_LOCAL_ON_PUSH_PR: false | |
# note that the following URL is extended with `/${{ matrix.viper-tools-zip-file }}` in the 'build-and-test' job: | |
TEST_LOCAL_ON_PUSH_PR_VIPERTOOLS_URL: https://github.com/viperproject/viper-ide/releases/download/v-2022-09-21-1611 | |
# the following URL is not extended and downloading the destination is expected to return the viperserver.jar: | |
TEST_LOCAL_ON_PUSH_PR_VIPERSERVER_URL: https://polybox.ethz.ch/index.php/s/54sDcqHDJHelKBY/download | |
jobs: | |
create-viper-tools: | |
if: github.event_name == 'workflow_dispatch' | |
runs-on: ubuntu-latest | |
env: | |
VIPERSERVER_URL: "https://github.com/viperproject/viperserver/releases/download/${{ github.event.inputs.viperserver_tag_name }}/viperserver.jar" | |
WIN_Z3_URL: "https://github.com/Z3Prover/z3/releases/download/z3-${{ github.event.inputs.z3_version }}/z3-${{ github.event.inputs.z3_version }}-x64-win.zip" | |
LINUX_Z3_URL: "https://github.com/Z3Prover/z3/releases/download/z3-${{ github.event.inputs.z3_version }}/z3-${{ github.event.inputs.z3_version }}-x64-ubuntu-16.04.zip" | |
MAC_Z3_URL: "https://github.com/Z3Prover/z3/releases/download/z3-${{ github.event.inputs.z3_version }}/z3-${{ github.event.inputs.z3_version }}-x64-osx-10.14.6.zip" | |
# The non-'4.8.7' URL will only work for '4.9.0' and above (such a version would break the above two URLs though, since they now build for `osx-10.16` and `glibc-2.35`) | |
MAC_ARM_Z3_URL: ${{ github.event.inputs.z3_version == '4.8.7' && 'https://github.com/viperproject/boogie-builder/raw/master/prebuilt_z3/z3-4.8.7-arm64-osx.zip' || format('https://github.com/Z3Prover/z3/releases/download/z3-{0}/z3-{0}-arm64-osx-11.zip', github.event.inputs.z3_version) }} | |
# we fake a ternary operator `a ? b : c` by using `a && b || c` as mentioned here: | |
# https://github.com/actions/runner/issues/409 | |
WIN_BOOGIE_URL: ${{ github.event.inputs.boogie_tag_name == 'latest' && 'https://github.com/viperproject/boogie-builder/releases/latest/download/boogie-win.zip' || format('https://github.com/viperproject/boogie-builder/releases/download/{0}/boogie-win.zip', github.event.inputs.boogie_tag_name) }} | |
LINUX_BOOGIE_URL: ${{ github.event.inputs.boogie_tag_name == 'latest' && 'https://github.com/viperproject/boogie-builder/releases/latest/download/boogie-linux.zip' || format('https://github.com/viperproject/boogie-builder/releases/download/{0}/boogie-linux.zip', github.event.inputs.boogie_tag_name) }} | |
MAC_BOOGIE_URL: ${{ github.event.inputs.boogie_tag_name == 'latest' && 'https://github.com/viperproject/boogie-builder/releases/latest/download/boogie-osx.zip' || format('https://github.com/viperproject/boogie-builder/releases/download/{0}/boogie-osx.zip', github.event.inputs.boogie_tag_name) }} | |
MAC_ARM_BOOGIE_URL: ${{ github.event.inputs.boogie_tag_name == 'latest' && 'https://github.com/viperproject/boogie-builder/releases/latest/download/boogie-osx-arm.zip' || format('https://github.com/viperproject/boogie-builder/releases/download/{0}/boogie-osx-arm.zip', github.event.inputs.boogie_tag_name) }} | |
VIPER_IDE_DEPS_REF: "master" | |
steps: | |
- name: Install prerequisites | |
run: sudo apt-get install curl zip unzip | |
- name: Create ViperTools folders | |
run: | | |
mkdir ViperToolsWin | |
mkdir ViperToolsLinux | |
mkdir ViperToolsMac | |
mkdir ViperToolsMacARM | |
- name: Clone ViperTools template | |
uses: actions/checkout@v3 | |
with: | |
repository: viperproject/viper-ide-deps | |
ref: ${{ env.VIPER_IDE_DEPS_REF }} | |
path: template | |
- name: Remove .git folder from template and use template | |
run: | | |
rm -r template/.git | |
cp -r template/* ViperToolsWin | |
cp -r template/* ViperToolsLinux | |
cp -r template/* ViperToolsMac | |
cp -r template/* ViperToolsMacARM | |
- name: Download ViperServer fat JAR | |
run: curl -L --silent --show-error --fail ${{ env.VIPERSERVER_URL }} --output viperserver.jar | |
- name: Copy ViperServer fat JAR to ViperTools | |
run: | | |
cp viperserver.jar ViperToolsWin/backends | |
cp viperserver.jar ViperToolsLinux/backends | |
cp viperserver.jar ViperToolsMac/backends | |
cp viperserver.jar ViperToolsMacARM/backends | |
- name: Download Z3 | |
run: | | |
curl --fail --silent --show-error -L ${{ env.WIN_Z3_URL }} --output z3-win.zip | |
curl --fail --silent --show-error -L ${{ env.LINUX_Z3_URL }} --output z3-linux.zip | |
curl --fail --silent --show-error -L ${{ env.MAC_Z3_URL }} --output z3-mac.zip | |
curl --fail --silent --show-error -L ${{ env.MAC_ARM_Z3_URL }} --output z3-mac-arm.zip | |
- name: Unzip Z3 and copy Z3 | |
run: | | |
unzip z3-win.zip -d z3-win | |
unzip z3-linux.zip -d z3-linux | |
unzip z3-mac.zip -d z3-mac | |
unzip z3-mac-arm.zip -d z3-mac-arm | |
mkdir -p ViperToolsWin/z3/bin && cp $(find z3-win -name bin -type d)/z3.exe ViperToolsWin/z3/bin | |
mkdir -p ViperToolsLinux/z3/bin && cp $(find z3-linux -name bin -type d)/z3 ViperToolsLinux/z3/bin | |
mkdir -p ViperToolsMac/z3/bin && cp $(find z3-mac -name bin -type d)/z3 ViperToolsMac/z3/bin | |
mkdir -p ViperToolsMacARM/z3/bin && cp $(find z3-mac-arm -name bin -type d)/z3 ViperToolsMacARM/z3/bin | |
- name: Download Boogie | |
run: | | |
curl --fail --silent --show-error -L ${{ env.WIN_BOOGIE_URL }} --output boogie-win.zip | |
curl --fail --silent --show-error -L ${{ env.LINUX_BOOGIE_URL }} --output boogie-linux.zip | |
curl --fail --silent --show-error -L ${{ env.MAC_BOOGIE_URL }} --output boogie-mac.zip | |
curl --fail --silent --show-error -L ${{ env.MAC_ARM_BOOGIE_URL }} --output boogie-mac-arm.zip | |
- name: Unzip Boogie and copy Boogie | |
run: | | |
unzip boogie-win.zip -d boogie-win | |
unzip boogie-linux.zip -d boogie-linux | |
unzip boogie-mac.zip -d boogie-mac | |
unzip boogie-mac-arm.zip -d boogie-mac-arm | |
mkdir -p ViperToolsWin/boogie && cp -r boogie-win/binaries-win ViperToolsWin/boogie/Binaries | |
mkdir -p ViperToolsLinux/boogie && cp -r boogie-linux/binaries-linux ViperToolsLinux/boogie/Binaries | |
mkdir -p ViperToolsMac/boogie && cp -r boogie-mac/binaries-osx ViperToolsMac/boogie/Binaries | |
mkdir -p ViperToolsMacARM/boogie && cp -r boogie-mac-arm/binaries-osx-arm ViperToolsMacARM/boogie/Binaries | |
- name: Create folder to store all ViperTools platform zip files | |
run: mkdir deploy | |
# note that we change into the tool folder to zip it. This avoids including the parent folder in the zip | |
- name: Zip ViperTools for Windows | |
run: zip -r ../deploy/ViperToolsWin.zip ./* | |
working-directory: ViperToolsWin | |
- name: Zip ViperTools for Linux | |
run: zip -r ../deploy/ViperToolsLinux.zip ./* | |
working-directory: ViperToolsLinux | |
- name: Zip ViperTools for macOS Intel | |
run: zip -r ../deploy/ViperToolsMac.zip ./* | |
working-directory: ViperToolsMac | |
- name: Zip ViperTools for macOS ARM | |
run: zip -r ../deploy/ViperToolsMacARM.zip ./* | |
working-directory: ViperToolsMacARM | |
- name: Upload ViperTools zip files | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ViperTools | |
path: deploy | |
build-and-test: | |
name: build-and-test - ${{ matrix.os }} | |
needs: create-viper-tools | |
# make the dependency optional in the sense that this job should be executed whenever the dependency was successful or skipped: | |
if: ${{ always() && (contains(needs.create-viper-tools.result, 'success') || contains(needs.create-viper-tools.result, 'skipped')) }} | |
strategy: | |
# tests should not be stopped when they fail on one of the OSes: | |
fail-fast: false | |
matrix: | |
os: [macos-latest, ubuntu-latest, windows-latest] | |
include: | |
- os: macos-latest | |
viper-tools-zip-file: "ViperToolsMac.zip" | |
- os: ubuntu-latest | |
viper-tools-zip-file: "ViperToolsLinux.zip" | |
- os: windows-latest | |
viper-tools-zip-file: "ViperToolsWin.zip" | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout Viper-IDE | |
uses: actions/checkout@v3 | |
- name: Install Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '16' # we use latest node instead of LTS 14 to have the same lockfile version as locally used | |
- name: Setup Java JDK | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '11' | |
distribution: 'temurin' | |
- run: java --version | |
- name: Cache npm | |
uses: actions/cache@v3 | |
with: | |
path: client/.npm | |
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
# npm ci fails to clone GitHub repos referenced in package.json with recent node versions | |
# the following work around has been proposed here: https://github.com/actions/setup-node/issues/214#issuecomment-810829250 | |
- name: Reconfigure git to use HTTPS authentication | |
run: > | |
git config --global url."https://github.com/".insteadOf | |
ssh://[email protected]/ | |
- run: npm ci --cache .npm --prefer-offline | |
working-directory: client | |
# there are two different scenarios in which different stuff should be tested: | |
# - regular changes to Viper-IDE: the normal test configuration should be used, which tests against the latest stable and | |
# nightly ViperTool releases. Any change to the Viper-IDE have ensure compatability | |
# - before releasing Viper-IDE together with some ViperTools, Viper-IDE has to be tested against the latest stable and | |
# nightly ViperTool releases AND the ViperTools that should be released. | |
- name: Download ViperTools to test against (only downloading previously created ViperTools) | |
if: ${{ contains(needs.create-viper-tools.result, 'success') }} | |
uses: actions/download-artifact@v3 | |
with: | |
name: ViperTools | |
path: client/ViperTools | |
- name: Setup ViperTools folder | |
if: ${{ fromJSON(env.TEST_LOCAL_ON_PUSH_PR) && !contains(needs.create-viper-tools.result, 'success') }} | |
run: mkdir -p client/ViperTools | |
- name: Download ViperTools to test against (only downloading ViperTools for PUSH and PR operations if configured accordingly) | |
if: ${{ fromJSON(env.TEST_LOCAL_ON_PUSH_PR) && !contains(needs.create-viper-tools.result, 'success') }} | |
run: curl --fail --silent --show-error -L ${{ env.TEST_LOCAL_ON_PUSH_PR_VIPERTOOLS_URL }}/${{ matrix.viper-tools-zip-file }} --output ${{ matrix.viper-tools-zip-file }} | |
working-directory: client/ViperTools | |
- name: Unzip ViperTools (non-windows) | |
if: ${{ !startsWith(matrix.os, 'windows') && (fromJSON(env.TEST_LOCAL_ON_PUSH_PR) || contains(needs.create-viper-tools.result, 'success')) }} | |
run: unzip ${{ matrix.viper-tools-zip-file }} -d ExtractedTools | |
working-directory: client/ViperTools | |
- name: Unzip ViperTools (windows) | |
if: ${{ startsWith(matrix.os, 'windows') && (fromJSON(env.TEST_LOCAL_ON_PUSH_PR) || contains(needs.create-viper-tools.result, 'success')) }} | |
run: powershell Expand-Archive -LiteralPath ${{ matrix.viper-tools-zip-file }} -DestinationPath ExtractedTools | |
working-directory: client/ViperTools | |
- name: Download ViperServer JAR (only downloading ViperTools for PUSH and PR operations if configured accordingly) | |
if: ${{ fromJSON(env.TEST_LOCAL_ON_PUSH_PR) && !contains(needs.create-viper-tools.result, 'success') }} | |
run: curl --fail --silent --show-error -L ${{ env.TEST_LOCAL_ON_PUSH_PR_VIPERSERVER_URL }} --output viperserver.jar | |
working-directory: client/ViperTools/ExtractedTools/backends | |
- name: Create path to extracted tools (non-windows) | |
if: ${{ !startsWith(matrix.os, 'windows') && (fromJSON(env.TEST_LOCAL_ON_PUSH_PR) || contains(needs.create-viper-tools.result, 'success')) }} | |
run: | | |
echo "EXTRACTED_TOOLS_PATH=${{ github.workspace }}/client/ViperTools/ExtractedTools" >> $GITHUB_ENV | |
shell: bash | |
- name: Create path to extracted tools (windows) | |
if: ${{ startsWith(matrix.os, 'windows') && (fromJSON(env.TEST_LOCAL_ON_PUSH_PR) || contains(needs.create-viper-tools.result, 'success')) }} | |
# replace all backslashes by double backslashes to properly escape them in the resulting JSON | |
run: | | |
PATH='EXTRACTED_TOOLS_PATH=${{ github.workspace }}\client\ViperTools\ExtractedTools' | |
echo ${PATH//'\'/'\\'} >> $GITHUB_ENV | |
shell: bash | |
- name: Create an additional test config | |
if: ${{ fromJSON(env.TEST_LOCAL_ON_PUSH_PR) || contains(needs.create-viper-tools.result, 'success') }} | |
run: | | |
mkdir -p client/src/test/data/settings | |
echo '{ | |
"viperSettings.buildVersion": "Local", | |
"viperSettings.paths": { | |
"v": "674a514867b1", | |
"viperToolsPath": { | |
"windows": "${{ env.EXTRACTED_TOOLS_PATH }}", | |
"linux": "${{ env.EXTRACTED_TOOLS_PATH }}", | |
"mac": "${{ env.EXTRACTED_TOOLS_PATH }}" | |
} | |
}, | |
"viperserver.trace.server": "verbose" | |
}' > client/src/test/data/settings/ci_local.json | |
shell: bash | |
- name: Get config content | |
if: ${{ fromJSON(env.TEST_LOCAL_ON_PUSH_PR) || contains(needs.create-viper-tools.result, 'success') }} | |
run: cat client/src/test/data/settings/ci_local.json | |
shell: bash | |
- name: Run tests (headless - non-ubuntu) | |
if: "!startsWith(matrix.os, 'ubuntu')" | |
run: npm test --full-trace | |
working-directory: client | |
env: | |
VIPER_IDE_LOG_DIR: ${{ github.workspace }}/client/logs | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run tests (headless - ubuntu only) | |
if: startsWith(matrix.os, 'ubuntu') | |
run: xvfb-run -a npm test --full-trace | |
working-directory: client | |
env: | |
VIPER_IDE_LOG_DIR: ${{ github.workspace }}/client/logs | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload Viper-IDE log files | |
if: ${{ failure() || cancelled() }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: TestLogs-${{ matrix.os }} | |
path: client/logs | |
- name: Clean 'dist' folder (ubuntu only) | |
if: startsWith(matrix.os, 'ubuntu') | |
run: npm run clean | |
working-directory: client | |
# `npm run package` resp. `@vscode/vsce` complains that it cannot find | |
# locate-java-home and vs-verification-toolbox dependencies (the two non-npm dependencies). | |
# this seems related to https://github.com/npm/cli/issues/791 | |
# the current workaround is to `run npm install` first: | |
# this workaround is only necessary when using node 14 | |
# - name: Run 'npm install' as a workaround to later being able to package Viper-IDE (ubuntu only) | |
# if: startsWith(matrix.os, 'ubuntu') | |
# run: npm install | |
# working-directory: client | |
- name: List all files that will be packaged (ubuntu only) | |
if: startsWith(matrix.os, 'ubuntu') | |
run: npx @vscode/vsce ls | |
working-directory: client | |
# use @vscode/vsce to package the extension into a vsix file. | |
# sets a special field in package.json to indicate that the package is not a pre-release (it's one | |
# by default) | |
- name: Package Viper-IDE extension (ubuntu & stable release only) | |
if: ${{ startsWith(matrix.os, 'ubuntu') && github.event.inputs.type == 'stable' }} | |
run: | | |
npm pkg set viper.prerelease=false --json | |
npm run package -- --out viper-ide.vsix | |
working-directory: client | |
- name: Package Viper-IDE extension (ubuntu & non-stable release only) | |
if: ${{ startsWith(matrix.os, 'ubuntu') && github.event.inputs.type != 'stable' }} | |
run: npm run package -- --out viper-ide.vsix --pre-release | |
working-directory: client | |
- name: Upload packaged Viper-IDE (ubuntu-only) | |
if: startsWith(matrix.os, 'ubuntu') | |
uses: actions/upload-artifact@v3 | |
with: | |
name: viper-ide.vsix | |
path: client/viper-ide.vsix | |
create-release: | |
# this job creates a nightly release or stable draft-release and adds viper-ide.vsix and Viper Tools as release assets | |
if: github.event_name == 'workflow_dispatch' | |
needs: build-and-test | |
runs-on: ubuntu-latest | |
env: | |
VIPERSERVER_RELEASE_URL: "https://github.com/viperproject/viperserver/releases/${{ github.event.inputs.viperserver_tag_name }}" | |
Z3_RELEASE_URL: "https://github.com/Z3Prover/z3/releases/z3-${{ github.event.inputs.z3_version }}" | |
BOOGIE_RELEASE_URL: ${{ github.event.inputs.boogie_tag_name == 'latest' && 'https://github.com/viperproject/boogie-builder/releases' || format('https://github.com/viperproject/boogie-builder/releases/{0}', github.event.inputs.boogie_tag_name) }} | |
steps: | |
# we have to checkout the repo to read client/package.json later on: | |
- name: Checkout Viper-IDE | |
uses: actions/checkout@v3 | |
- name: Download packaged Viper IDE | |
uses: actions/download-artifact@v3 | |
with: | |
name: viper-ide.vsix | |
path: client | |
- name: Download ViperTools | |
uses: actions/download-artifact@v3 | |
with: | |
name: ViperTools | |
path: deploy | |
- name: Create release tag | |
if: ${{ github.event.inputs.type != 'stable' && github.event.inputs.type != 'rc' }} | |
shell: bash | |
run: echo "TAG_NAME=$(date +v-%Y-%m-%d-%H%M)" >> $GITHUB_ENV | |
# use the following action if nightly releases should eventually be deleted | |
# - name: Create nightly release | |
# if: ${{ github.event.inputs.type != 'stable' && github.event.inputs.type != 'rc' }} | |
# id: create_nightly_release | |
# uses: viperproject/create-nightly-release@v1 | |
# env: | |
# # This token is provided by Actions, you do not need to create your own token | |
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# with: | |
# tag_name: ${{ env.TAG_NAME }} | |
# release_name: Nightly Release ${{ env.TAG_NAME }} | |
# body: Based on ViperServer release ${{ github.event.inputs.viperserver_tag_name }} | |
# keep_num: 1 # keep the previous nightly release such that there are always two | |
# because e.g. prusti-dev depends on the nightly releases and updates only twice a month to the | |
# latest version, nightly releases should be kept | |
- name: Create nightly release | |
if: ${{ github.event.inputs.type != 'stable' && github.event.inputs.type != 'rc' }} | |
id: create_nightly_release | |
uses: actions/create-release@v1 | |
env: | |
# This token is provided by Actions, you do not need to create your own token | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ env.TAG_NAME }} | |
release_name: Nightly Release ${{ env.TAG_NAME }} | |
body: | | |
Based on | |
- ViperServer release [`${{ github.event.inputs.viperserver_tag_name }}`](${{ env.VIPERSERVER_RELEASE_URL }}) | |
- [Z3 `${{ github.event.inputs.z3_version }}`](${{ env.Z3_RELEASE_URL }}) | |
- [Boogie release `${{ github.event.inputs.boogie_tag_name }}`](${{ env.BOOGIE_RELEASE_URL }}) | |
draft: false | |
prerelease: true | |
- name: Store nightly release upload URL | |
if: ${{ github.event.inputs.type != 'stable' && github.event.inputs.type != 'rc' }} | |
shell: bash | |
run: echo "UPLOAD_URL=${{ steps.create_nightly_release.outputs.upload_url }}" >> $GITHUB_ENV | |
- name: Create stable draft-release | |
if: ${{ github.event.inputs.type == 'stable' || github.event.inputs.type == 'rc' }} | |
id: create_stable_release | |
uses: actions/create-release@v1 | |
env: | |
# This token is provided by Actions, you do not need to create your own token | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ github.event.inputs.tag_name }} | |
release_name: ${{ github.event.inputs.release_name }} | |
body: | | |
Based on | |
- ViperServer release [`${{ github.event.inputs.viperserver_tag_name }}`](${{ env.VIPERSERVER_RELEASE_URL }}) | |
- [Z3 `${{ github.event.inputs.z3_version }}`](${{ env.Z3_RELEASE_URL }}) | |
- [Boogie release `${{ github.event.inputs.boogie_tag_name }}`](${{ env.BOOGIE_RELEASE_URL }}) | |
draft: true | |
prerelease: false | |
- name: Store stable release upload URL | |
if: ${{ github.event.inputs.type == 'stable' || github.event.inputs.type == 'rc' }} | |
shell: bash | |
run: echo "UPLOAD_URL=${{ steps.create_stable_release.outputs.upload_url }}" >> $GITHUB_ENV | |
- name: Upload packaged Viper IDE | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ env.UPLOAD_URL }} | |
asset_path: client/viper-ide.vsix | |
asset_name: viper-ide.vsix | |
asset_content_type: application/octet-stream | |
- name: Upload ViperTools for Windows | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ env.UPLOAD_URL }} | |
asset_path: deploy/ViperToolsWin.zip | |
asset_name: ViperToolsWin.zip | |
asset_content_type: application/zip | |
- name: Upload ViperTools for Ubuntu | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ env.UPLOAD_URL }} | |
asset_path: deploy/ViperToolsLinux.zip | |
asset_name: ViperToolsLinux.zip | |
asset_content_type: application/zip | |
- name: Upload ViperTools for macOS Intel | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ env.UPLOAD_URL }} | |
asset_path: deploy/ViperToolsMac.zip | |
asset_name: ViperToolsMac.zip | |
asset_content_type: application/zip | |
- name: Upload ViperTools for macOS ARM | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ env.UPLOAD_URL }} | |
asset_path: deploy/ViperToolsMacARM.zip | |
asset_name: ViperToolsMacARM.zip | |
asset_content_type: application/zip | |
# compare version in client/package.json with last published version on | |
# VS Marketplace and deploy this version if newer. | |
# credits go to @fpoli! | |
- name: Obtain version information | |
run: | | |
VSCE_OUTPUT="$( | |
npx @vscode/vsce show viper-admin.viper --json | |
)" | |
if [[ $(echo $VSCE_OUTPUT | grep --fixed-strings --line-regexp undefined) ]]; then | |
LAST_PUBLISHED_VERSION="0" | |
else | |
LAST_PUBLISHED_VERSION="$( | |
echo $VSCE_OUTPUT | jq '.versions[0].version' --raw-output | |
)" | |
fi | |
CURRENT_VERSION="$( | |
cat client/package.json | jq '.version' --raw-output | |
)" | |
echo "LAST_PUBLISHED_VERSION=$LAST_PUBLISHED_VERSION" >> $GITHUB_ENV | |
echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV | |
# publish 'stable' releases (release-candidates will be released as pre-releases below) | |
- name: Publish the extension to Visual Studio Marketplace | |
uses: HaaLeo/publish-vscode-extension@v1 | |
if: ${{ github.event.inputs.type == 'stable' && env.CURRENT_VERSION != env.LAST_PUBLISHED_VERSION }} | |
with: | |
pat: ${{ secrets.VSCE_TOKEN }} | |
registryUrl: https://marketplace.visualstudio.com | |
extensionFile: client/viper-ide.vsix | |
packagePath: '' | |
- name: Publish the extension to Open VSX Registry | |
uses: HaaLeo/publish-vscode-extension@v1 | |
if: ${{ github.event.inputs.type == 'stable' && env.CURRENT_VERSION != env.LAST_PUBLISHED_VERSION }} | |
with: | |
pat: ${{ secrets.OPEN_VSX_TOKEN }} | |
registryUrl: https://open-vsx.org | |
extensionFile: client/viper-ide.vsix | |
packagePath: '' | |
# publish 'rc' releases as pre-releases | |
- name: Publish the extension to Visual Studio Marketplace (as pre-release) | |
uses: HaaLeo/publish-vscode-extension@v1 | |
if: ${{ github.event.inputs.type == 'rc' && env.CURRENT_VERSION != env.LAST_PUBLISHED_VERSION }} | |
with: | |
pat: ${{ secrets.VSCE_TOKEN }} | |
registryUrl: https://marketplace.visualstudio.com | |
extensionFile: client/viper-ide.vsix | |
packagePath: '' | |
preRelease: true |