enso/.github/workflows/release.yml

427 lines
20 KiB
YAML
Raw Normal View History

name: Release CI
on:
push:
tags:
- "enso-*.*.*"
env:
# Please ensure that this is in sync with graalVersion in build.sbt
graalVersion: 20.1.0
# Please ensure that this is in sync with javaVersion in build.sbt
javaVersion: 11
# Please ensure that this is in sync with project/build.properties
sbtVersion: 1.3.13
2020-08-07 12:18:09 +03:00
# Please ensure that this is in sync with rustVersion in build.sbt
rustToolchain: nightly-2019-11-04
jobs:
# This job should be kept up-to-date with scala.yml#build (but keep the added version check)
2020-08-07 12:18:09 +03:00
build:
name: Build
runs-on: ${{ matrix.os }}
timeout-minutes: 45
strategy:
2020-08-07 12:18:09 +03:00
matrix:
os: [macOS-latest, ubuntu-latest, windows-latest]
fail-fast: true
steps:
- name: Checkout
uses: actions/checkout@v2
with:
path: repo
2020-08-07 12:18:09 +03:00
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.rustToolchain }}
override: true
- name: Enable Developer Command Prompt (Windows)
uses: ilammy/msvc-dev-cmd@v1.3.0
- name: Setup conda
uses: s-weigand/setup-conda@v1
with:
update-conda: true
conda-channels: anaconda, conda-forge
2020-08-07 12:18:09 +03:00
- name: Setup Conda Environment on Windows
if: runner.os == 'Windows'
run: |
conda create --name enso
conda init powershell
- name: Activate Conda Environment on Windows
if: runner.os == 'Windows'
run: conda activate enso
- name: Install FlatBuffers Compiler
run: conda install flatbuffers=1.12.0
- name: Setup GraalVM Environment
uses: ayltai/setup-graalvm@v1
with:
graalvm-version: ${{ env.graalVersion }}
java-version: ${{ env.javaVersion }}
2020-08-07 12:18:09 +03:00
native-image: true
- name: Set Up SBT
run: |
curl -fsSL -o sbt.tgz https://piccolo.link/sbt-${{env.sbtVersion}}.tgz
tar -xzf sbt.tgz
echo ::add-path::$GITHUB_WORKSPACE/sbt/bin/
# Caches
- name: Cache SBT
uses: actions/cache@v2
with:
path: |
~/.sbt
~/.ivy2/cache
~/.cache
key: ${{ runner.os }}-sbt-${{ hashFiles('**build.sbt') }}
restore-keys: ${{ runner.os }}-sbt-
# Build Artifacts
2020-08-07 12:18:09 +03:00
- name: Bootstrap the Project
working-directory: repo
run: sbt --no-colors bootstrap
- name: Build the Runtime Uberjar
working-directory: repo
run: sbt --no-colors runtime/assembly
- name: Build the Runner Uberjar
working-directory: repo
run: sbt --no-colors runner/assembly
- name: Build the Project Manager Uberjar
working-directory: repo
run: sbt --no-colors project-manager/assembly
2020-08-07 12:18:09 +03:00
- name: Build the Launcher Native Image
working-directory: repo
run: sbt --no-colors launcher/buildNativeImage
- name: Build the Manifest
working-directory: repo
run: |
cp distribution/manifest.template.yaml manifest.yaml
echo "graal-vm-version: ${{ env.graalVersion }}" >> manifest.yaml
echo "graal-java-version: ${{ env.javaVersion }}" >> manifest.yaml
2020-08-07 12:18:09 +03:00
# Prepare distributions
- name: Prepare Distribution Version (Unix)
working-directory: repo
2020-08-07 12:18:09 +03:00
if: runner.os != 'Windows'
shell: bash
run: |
2020-08-07 12:18:09 +03:00
chmod +x enso
DIST_VERSION=$(./enso version --json | jq -r '.version')
echo ::set-env name=DIST_VERSION::$DIST_VERSION
2020-08-07 12:18:09 +03:00
- name: Prepare Distribution Version (Windows)
working-directory: repo
if: runner.os == 'Windows'
shell: bash
run: |
2020-08-07 12:18:09 +03:00
DIST_VERSION=$(./enso.exe version --json | jq -r '.version')
echo ::set-env name=DIST_VERSION::$DIST_VERSION
2020-08-07 12:18:09 +03:00
# Currently the only architecture supported by Github runners is amd64
- name: Prepare Distribution Environment
working-directory: repo
shell: bash
run: |
2020-08-07 12:18:09 +03:00
DIST_ARCH=amd64
DIST_OS=$(echo ${{ runner.os }} | awk '{print tolower($0)}')
LAUNCHER_DIST_ROOT=enso-launcher-$DIST_VERSION-$DIST_OS-$DIST_ARCH
LAUNCHER_DIST_DIR=$LAUNCHER_DIST_ROOT/enso
ENGINE_DIST_ROOT=enso-engine-$DIST_VERSION-$DIST_OS-$DIST_ARCH
ENGINE_DIST_DIR=$ENGINE_DIST_ROOT/enso-$DIST_VERSION
echo ::set-env name=LAUNCHER_DIST_DIR::$LAUNCHER_DIST_DIR
echo ::set-env name=LAUNCHER_DIST_ROOT::$LAUNCHER_DIST_ROOT
echo ::set-env name=ENGINE_DIST_DIR::$ENGINE_DIST_DIR
echo ::set-env name=ENGINE_DIST_ROOT::$ENGINE_DIST_ROOT
2020-08-07 12:18:09 +03:00
- name: Prepare Launcher Distribution (Common)
working-directory: repo
2020-08-07 12:18:09 +03:00
shell: bash
run: |
mkdir -p ${{ env.LAUNCHER_DIST_DIR }}
mkdir ${{ env.LAUNCHER_DIST_DIR }}/bin
mkdir ${{ env.LAUNCHER_DIST_DIR }}/dist
mkdir ${{ env.LAUNCHER_DIST_DIR }}/runtime
cp distribution/launcher/.enso.portable ${{ env.LAUNCHER_DIST_DIR }}
cp distribution/launcher/README.md ${{ env.LAUNCHER_DIST_DIR }}
cp distribution/launcher/NOTICE ${{ env.LAUNCHER_DIST_DIR }}
cp -r distribution/launcher/components-licences ${{ env.LAUNCHER_DIST_DIR }}
2020-08-07 12:18:09 +03:00
- name: Prepare Launcher Distribution (Unix)
working-directory: repo
if: runner.os != 'Windows'
shell: bash
run: |
2020-08-07 12:18:09 +03:00
cp enso ${{ env.LAUNCHER_DIST_DIR }}/bin/
- name: Prepare Launcher Distribution (Windows)
working-directory: repo
if: runner.os == 'Windows'
shell: bash
run: |
2020-08-07 12:18:09 +03:00
cp enso.exe ${{ env.LAUNCHER_DIST_DIR }}/bin/
2020-08-07 12:18:09 +03:00
# The way artifacts are uploaded currently does not preserve the
# executable bits for Unix. However putting artifacts into a ZIP would
# create a twice nested ZIP file. For now, users downloading artifacts
# from the CI builds have to set the bit themselves.
# So the following two lines have been removed from this step, as they do
# nothing useful:
# chmod +x $ENGINE_DIST_DIR/bin/enso
# chmod +x $ENGINE_DIST_DIR/bin/project-manager
- name: Prepare Engine Distribution
working-directory: repo
shell: bash
run: |
2020-08-07 12:18:09 +03:00
mkdir -p $ENGINE_DIST_DIR
mkdir $ENGINE_DIST_DIR/component
cp runtime.jar $ENGINE_DIST_DIR/component
mv runner.jar $ENGINE_DIST_DIR/component
mv project-manager.jar $ENGINE_DIST_DIR/component
cp -r distribution/std-lib $ENGINE_DIST_DIR/std-lib
cp -r distribution/bin $ENGINE_DIST_DIR/bin
cp manifest.yaml $ENGINE_DIST_DIR
2020-08-07 12:18:09 +03:00
# Ensure that the versions encoded in the binary and in the release match
- name: Check Versions (Unix)
working-directory: repo
if: runner.os != 'Windows'
2020-08-07 12:18:09 +03:00
shell: bash
run: |
2020-08-07 12:18:09 +03:00
ref=${{ github.ref }}
refversion=${ref#"refs/tags/enso-"}
binversion=${{ env.DIST_VERSION }}
engineversion=$(${{ env.ENGINE_DIST_DIR }}/bin/enso --version --json | jq -r '.version')
test $binversion = $refversion || (echo "Tag version $refversion and the launcher version $binversion do not match" && false)
test $engineversion = $refversion || (echo "Tag version $refversion and the engine version $engineversion do not match" && false)
- name: Check Versions (Windows)
working-directory: repo
if: runner.os == 'Windows'
shell: bash
run: |
ref=${{ github.ref }}
refversion=${ref#"refs/tags/enso-"}
binversion=${{ env.DIST_VERSION }}
2020-08-07 12:18:09 +03:00
engineversion=$(${{ env.ENGINE_DIST_DIR }}/bin/enso.bat --version --json | jq -r '.version')
test $binversion = $refversion || (echo "Tag version $refversion and the launcher version $binversion do not match" && false)
test $engineversion = $refversion || (echo "Tag version $refversion and the engine version $engineversion do not match" && false)
2020-08-07 12:18:09 +03:00
# Publish
- name: Upload the Engine Artifact
uses: actions/upload-artifact@v2
with:
name: ${{ env.ENGINE_DIST_ROOT }}
path: repo/${{ env.ENGINE_DIST_ROOT }}
- name: Upload the Launcher Artifact
uses: actions/upload-artifact@v2
with:
2020-08-07 12:18:09 +03:00
name: ${{ env.LAUNCHER_DIST_ROOT }}
path: repo/${{ env.LAUNCHER_DIST_ROOT }}
- name: Upload the Manifest Artifact
uses: actions/upload-artifact@v2
with:
name: manifest
path: repo/manifest.yaml
create-release:
name: Prepare Release
runs-on: ubuntu-latest
2020-08-07 12:18:09 +03:00
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v2
# Without specifying options, it downloads all artifacts
- uses: actions/download-artifact@v2
with:
path: artifacts
# This jobs can be used to debug errors, it may be removed
2020-08-07 12:18:09 +03:00
- name: Display Structure of Downloaded Files
run: ls -R
working-directory: artifacts
2020-08-07 12:18:09 +03:00
- name: Save Version to Environment
shell: bash
run: |
ref=${{ github.ref }}
DIST_VERSION=${ref#"refs/tags/enso-"}
echo "Preparing release for $DIST_VERSION"
echo ::set-env name=DIST_VERSION::$DIST_VERSION
- name: Download GraalVM for Bundles
shell: bash
run: |
curl -fsSL -o graalvm-linux.tar.gz "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${{ env.graalVersion }}/graalvm-ce-java${{ env.javaVersion }}-linux-amd64-${{ env.graalVersion }}.tar.gz"
echo "Linux JVM downloaded"
curl -fsSL -o graalvm-macos.tar.gz "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${{ env.graalVersion }}/graalvm-ce-java${{ env.javaVersion }}-darwin-amd64-${{ env.graalVersion }}.tar.gz"
echo "MacOS JVM downloaded"
curl -fsSL -o graalvm-windows.zip "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${{ env.graalVersion }}/graalvm-ce-java${{ env.javaVersion }}-windows-amd64-${{ env.graalVersion }}.zip"
echo "Windows JVM downloaded"
mkdir graalvm-linux
mkdir graalvm-macos
mkdir graalvm-windows
(cd graalvm-linux && tar xf ../graalvm-linux.tar.gz)
echo "Linux JVM extracted"
(cd graalvm-macos && tar xf ../graalvm-macos.tar.gz)
echo "MacOS JVM extracted"
(cd graalvm-windows && unzip -q ../graalvm-windows.zip)
echo "Windows JVM extracted"
# As the download-artifact action does not preserve the executable bits,
# we fix them here, so that the release assets are easy to use.
- name: Fix Package Structure
shell: bash
run: |
2020-08-07 12:18:09 +03:00
chmod +x artifacts/enso-engine-${{ env.DIST_VERSION }}-linux-amd64/enso-${{ env.DIST_VERSION }}/bin/enso
chmod +x artifacts/enso-engine-${{ env.DIST_VERSION }}-linux-amd64/enso-${{ env.DIST_VERSION }}/bin/project-manager
chmod +x artifacts/enso-engine-${{ env.DIST_VERSION }}-macos-amd64/enso-${{ env.DIST_VERSION }}/bin/enso
chmod +x artifacts/enso-engine-${{ env.DIST_VERSION }}-macos-amd64/enso-${{ env.DIST_VERSION }}/bin/project-manager
chmod +x artifacts/enso-launcher-${{ env.DIST_VERSION }}-linux-amd64/enso/bin/enso
chmod +x artifacts/enso-launcher-${{ env.DIST_VERSION }}-macos-amd64/enso/bin/enso
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-linux-amd64/enso/config
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-linux-amd64/enso/dist
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-linux-amd64/enso/runtime
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-macos-amd64/enso/config
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-macos-amd64/enso/dist
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-macos-amd64/enso/runtime
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-windows-amd64/enso/config
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-windows-amd64/enso/dist
mkdir artifacts/enso-launcher-${{ env.DIST_VERSION }}-windows-amd64/enso/runtime
- name: Prepare Packages
shell: bash
run: |
2020-08-07 12:18:09 +03:00
(cd artifacts/enso-engine-${{ env.DIST_VERSION }}-linux-amd64/ && tar -czf ../../enso-engine-${{ env.DIST_VERSION }}-linux-amd64.tar.gz enso-${{ env.DIST_VERSION }} )
echo "Linux Engine packaged"
(cd artifacts/enso-engine-${{ env.DIST_VERSION }}-macos-amd64/ && tar -czf ../../enso-engine-${{ env.DIST_VERSION }}-macos-amd64.tar.gz enso-${{ env.DIST_VERSION }} )
echo "MacOS Engine packaged"
(cd artifacts/enso-engine-${{ env.DIST_VERSION }}-windows-amd64/ && zip -q -r ../../enso-engine-${{ env.DIST_VERSION }}-windows-amd64.zip enso-${{ env.DIST_VERSION }} )
echo "Windows Engine packaged"
(cd artifacts/enso-launcher-${{ env.DIST_VERSION }}-linux-amd64/ && tar -czf ../../enso-launcher-${{ env.DIST_VERSION }}-linux-amd64.tar.gz enso )
echo "Linux Launcher packaged"
(cd artifacts/enso-launcher-${{ env.DIST_VERSION }}-macos-amd64/ && tar -czf ../../enso-launcher-${{ env.DIST_VERSION }}-macos-amd64.tar.gz enso )
echo "MacOS Launcher packaged"
(cd artifacts/enso-launcher-${{ env.DIST_VERSION }}-windows-amd64/ && zip -q -r ../../enso-launcher-${{ env.DIST_VERSION }}-windows-amd64.zip enso )
echo "Windows Launcher packaged"
- name: Prepare Bundles
shell: bash
run: |
2020-08-07 12:18:09 +03:00
cp -r artifacts/enso-engine-${{ env.DIST_VERSION }}-linux-amd64/enso-${{ env.DIST_VERSION }} artifacts/enso-launcher-${{ env.DIST_VERSION }}-linux-amd64/enso/dist/${{ env.DIST_VERSION }}
cp -r artifacts/enso-engine-${{ env.DIST_VERSION }}-macos-amd64/enso-${{ env.DIST_VERSION }} artifacts/enso-launcher-${{ env.DIST_VERSION }}-macos-amd64/enso/dist/${{ env.DIST_VERSION }}
cp -r artifacts/enso-engine-${{ env.DIST_VERSION }}-windows-amd64/enso-${{ env.DIST_VERSION }} artifacts/enso-launcher-${{ env.DIST_VERSION }}-windows-amd64/enso/dist/${{ env.DIST_VERSION }}
mv graalvm-linux/graalvm-ce-java${{ env.javaVersion }}-${{ env.graalVersion }} artifacts/enso-launcher-${{ env.DIST_VERSION }}-linux-amd64/enso/runtime
mv graalvm-macos/graalvm-ce-java${{ env.javaVersion }}-${{ env.graalVersion }} artifacts/enso-launcher-${{ env.DIST_VERSION }}-macos-amd64/enso/runtime
mv graalvm-windows/graalvm-ce-java${{ env.javaVersion }}-${{ env.graalVersion }} artifacts/enso-launcher-${{ env.DIST_VERSION }}-windows-amd64/enso/runtime
echo "Bundles prepared"
(cd artifacts/enso-launcher-${{ env.DIST_VERSION }}-linux-amd64/ && tar -czf ../../enso-bundle-${{ env.DIST_VERSION }}-linux-amd64.tar.gz enso )
echo "Linux Bundle packaged"
(cd artifacts/enso-launcher-${{ env.DIST_VERSION }}-macos-amd64/ && tar -czf ../../enso-bundle-${{ env.DIST_VERSION }}-macos-amd64.tar.gz enso )
echo "MacOS Bundle packaged"
(cd artifacts/enso-launcher-${{ env.DIST_VERSION }}-windows-amd64/ && zip -q -r ../../enso-bundle-${{ env.DIST_VERSION }}-windows-amd64.zip enso )
echo "Windows Bundle packaged"
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: enso-${{ env.DIST_VERSION }}
release_name: Enso ${{ env.DIST_VERSION }}
body: "Please fill-in the release description"
draft: true
prerelease: true
2020-08-07 12:18:09 +03:00
- name: Publish the Engine (Linux)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: enso-engine-${{ env.DIST_VERSION }}-linux-amd64.tar.gz
asset_name: enso-engine-${{ env.DIST_VERSION }}-linux-amd64.tar.gz
asset_content_type: application/x-tar
- name: Publish the Engine (MacOS)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: enso-engine-${{ env.DIST_VERSION }}-macos-amd64.tar.gz
asset_name: enso-engine-${{ env.DIST_VERSION }}-macos-amd64.tar.gz
asset_content_type: application/x-tar
- name: Publish the Engine (Windows)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
2020-08-07 12:18:09 +03:00
asset_path: enso-engine-${{ env.DIST_VERSION }}-windows-amd64.zip
asset_name: enso-engine-${{ env.DIST_VERSION }}-windows-amd64.zip
asset_content_type: application/zip
- name: Publish the Launcher (Linux)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: enso-launcher-${{ env.DIST_VERSION }}-linux-amd64.tar.gz
asset_name: enso-launcher-${{ env.DIST_VERSION }}-linux-amd64.tar.gz
asset_content_type: application/x-tar
- name: Publish the Launcher (MacOS)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: enso-launcher-${{ env.DIST_VERSION }}-macos-amd64.tar.gz
asset_name: enso-launcher-${{ env.DIST_VERSION }}-macos-amd64.tar.gz
asset_content_type: application/x-tar
- name: Publish the Launcher (Windows)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: enso-launcher-${{ env.DIST_VERSION }}-windows-amd64.zip
asset_name: enso-launcher-${{ env.DIST_VERSION }}-windows-amd64.zip
asset_content_type: application/zip
- name: Publish the Bundle (Linux)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: enso-bundle-${{ env.DIST_VERSION }}-linux-amd64.tar.gz
asset_name: enso-bundle-${{ env.DIST_VERSION }}-linux-amd64.tar.gz
asset_content_type: application/x-tar
- name: Publish the Bundle (MacOS)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: enso-bundle-${{ env.DIST_VERSION }}-macos-amd64.tar.gz
asset_name: enso-bundle-${{ env.DIST_VERSION }}-macos-amd64.tar.gz
asset_content_type: application/x-tar
- name: Publish the Bundle (Windows)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: enso-bundle-${{ env.DIST_VERSION }}-windows-amd64.zip
asset_name: enso-bundle-${{ env.DIST_VERSION }}-windows-amd64.zip
asset_content_type: application/zip
- name: Publish the Manifest
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: artifacts/manifest/manifest.yaml
asset_name: manifest.yaml
asset_content_type: application/yaml