mirror of
https://github.com/enso-org/enso.git
synced 2024-11-30 17:44:58 +03:00
e8e44f68ad
1. This commit adds an extensive library for parsing commandline arguments and formatting output. 2. It implements the expected CLI for the launcher. 3. It turns off parallel execution on the CI in hopes of making it more stable. 4. It implements plugin support in the launcher.
349 lines
12 KiB
YAML
349 lines
12 KiB
YAML
name: Engine CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main, "release/*"]
|
|
pull_request:
|
|
branches: ["*"]
|
|
|
|
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
|
|
excludedPaths: |
|
|
.github/PULL_REQUEST_TEMPLATE.md
|
|
.github/CODEOWNERS
|
|
.github/ISSUE_TEMPLATE/*
|
|
/doc/*
|
|
.gitignore
|
|
.scalafmt.conf
|
|
CODE_OF_CONDUCT.md
|
|
CONTRIBUTING.md
|
|
LICENSE
|
|
README.md
|
|
|
|
jobs:
|
|
# This job is responsible for testing the codebase
|
|
test:
|
|
name: Test Engine
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 30
|
|
strategy:
|
|
matrix:
|
|
os: [macOS-latest, ubuntu-latest, windows-latest]
|
|
fail-fast: false
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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: false
|
|
conda-channels: anaconda, conda-forge
|
|
- 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 --freeze-installed flatbuffers=1.12.0
|
|
- name: Setup GraalVM Environment
|
|
uses: ayltai/setup-graalvm@v1
|
|
with:
|
|
graalvm-version: ${{ env.graalVersion }}
|
|
java-version: ${{ env.javaVersion }}
|
|
native-image: true
|
|
- name: Set Up SBT
|
|
run: |
|
|
curl --retry 4 --retry-connrefused -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
|
|
- name: Bootstrap Enso project
|
|
run: sbt --no-colors bootstrap
|
|
- name: Build Enso
|
|
run: sbt --no-colors compile
|
|
|
|
# Tests
|
|
- name: Setup Tests on Windows
|
|
if: runner.os == 'Windows'
|
|
run: |
|
|
echo '::set-env name=CI_TEST_TIMEFACTOR::2'
|
|
echo '::set-env name=CI_TEST_FLAKY_ENABLE::true'
|
|
- name: Test Enso
|
|
run: sbt --no-colors "set Global / parallelExecution := false; test"
|
|
- name: Check Runtime Benchmark Compilation
|
|
run: sbt -no-colors runtime/Benchmark/compile
|
|
- name: Check Language Server Benchmark Compilation
|
|
run: sbt -no-colors language-server/Benchmark/compile
|
|
- name: Check Searcher Benchmark Compilation
|
|
run: sbt -no-colors searcher/Benchmark/compile
|
|
- name: Build the Uberjar
|
|
run: sbt -no-colors runner/assembly
|
|
- name: Test the Uberjar
|
|
run: ./runner.jar --run tools/ci/Test.enso
|
|
- name: Test the Repl in the Uberjar
|
|
shell: bash
|
|
run:
|
|
cat tools/ci/artifact-test/repl/ReplTest.in | ./runner.jar --repl |
|
|
diff -q tools/ci/artifact-test/repl/ReplTest.out - && echo "Test
|
|
successful"
|
|
|
|
# This job is responsible for building the artifacts
|
|
build:
|
|
name: Build Engine
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
steps:
|
|
- name: Checkout (PR)
|
|
uses: actions/checkout@v2
|
|
if: github.event_name == 'pull_request'
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
- name: Checkout (Branch)
|
|
uses: actions/checkout@v2
|
|
if: github.event_name != 'pull_request'
|
|
- name: Setup conda
|
|
uses: s-weigand/setup-conda@v1
|
|
with:
|
|
update-conda: true
|
|
conda-channels: anaconda, conda-forge
|
|
- 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 }}
|
|
native-image: false
|
|
- name: Set Up SBT
|
|
run: |
|
|
curl -fSL -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
|
|
- name: Bootstrap the project
|
|
run: sbt --no-colors bootstrap
|
|
- name: Build the Runtime Uberjar
|
|
run: sbt --no-colors runtime/assembly
|
|
- name: Build the Runner Uberjar
|
|
run: sbt --no-colors runner/assembly
|
|
- name: Build the Project Manager Uberjar
|
|
run: sbt --no-colors project-manager/assembly
|
|
- name: Build the Manifest
|
|
run: |
|
|
cp distribution/manifest.template.yaml manifest.yaml
|
|
echo "graal-vm-version: $graalVersion" >> manifest.yaml
|
|
echo "graal-java-version: $javaVersion" >> manifest.yaml
|
|
- name: Prepare Distribution
|
|
run: |
|
|
DIST_VERSION=$(./runner.jar --version --json | jq -r '.version')
|
|
DIST_ROOT=enso-engine-$DIST_VERSION
|
|
DIST_DIR=$DIST_ROOT/enso-$DIST_VERSION
|
|
mkdir -p $DIST_DIR
|
|
mkdir $DIST_DIR/component
|
|
cp runtime.jar $DIST_DIR/component
|
|
mv runner.jar $DIST_DIR/component
|
|
mv project-manager.jar $DIST_DIR/component
|
|
cp -r distribution/std-lib $DIST_DIR/std-lib
|
|
cp -r distribution/bin $DIST_DIR/bin
|
|
chmod +x $DIST_DIR/bin/enso
|
|
chmod +x $DIST_DIR/bin/project-manager
|
|
cp manifest.yaml $DIST_DIR
|
|
echo ::set-env name=DIST_ROOT::$DIST_ROOT
|
|
echo ::set-env name=DIST_DIR::$DIST_DIR
|
|
- name: Build the Parser JS Bundle
|
|
run: sbt -no-colors syntaxJS/fullOptJS
|
|
|
|
# Publish
|
|
- name: Publish the Distribution Artifact
|
|
uses: actions/upload-artifact@v1.0.0
|
|
with:
|
|
name: ${{ env.DIST_ROOT }}
|
|
path: ${{ env.DIST_ROOT }}
|
|
- name: Prepare the FlatBuffers Schemas for Upload
|
|
run: |
|
|
mkdir fbs-upload
|
|
cp -r "engine/language-server/src/main/schema" fbs-upload/fbs-schema/
|
|
zip -r -m -ll "fbs-upload/fbs-schema.zip" "fbs-upload/fbs-schema/"
|
|
- name: Publish the FlatBuffers Schemas
|
|
uses: actions/upload-artifact@v1.0.0
|
|
with:
|
|
name: Engine Protocol FlatBuffers Schemas
|
|
path: ./fbs-upload/fbs-schema.zip
|
|
- name: Prepare Parser JS Bundle for Upload
|
|
run: |
|
|
mkdir parser-upload
|
|
cp ./target/scala-parser.js parser-upload
|
|
- name: Publish the Parser JS Bundle
|
|
uses: actions/upload-artifact@v1.0.0
|
|
with:
|
|
name: Parser JS Bundle
|
|
path: ./target/scala-parser.js
|
|
- name: Publish the Manifest
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: manifest
|
|
path: manifest.yaml
|
|
- name: Prepare AWS Session
|
|
run: |
|
|
aws configure --profile s3-upload <<-EOF > /dev/null 2>&1
|
|
${{ secrets.ARTEFACT_S3_ACCESS_KEY_ID }}
|
|
${{ secrets.ARTEFACT_S3_SECRET_ACCESS_KEY }}
|
|
us-west-2
|
|
text
|
|
EOF
|
|
- name: Upload Parser JS Bundle to S3
|
|
run: |
|
|
aws s3 sync ./parser-upload s3://packages-luna/parser-js/nightly/`git rev-parse HEAD` --profile s3-upload --acl public-read --delete
|
|
- name: Upload FlatBuffers Schemas to S3
|
|
run: |
|
|
aws s3 sync ./fbs-upload s3://packages-luna/fbs-schema/nightly/`git rev-parse HEAD` --profile s3-upload --acl public-read --delete
|
|
- name: Upload Distribution to S3
|
|
run: |
|
|
aws s3 sync ${{ env.DIST_DIR }} s3://packages-luna/project-manager/nightly/`git rev-parse HEAD` --profile s3-upload --acl public-read --delete
|
|
- name: Teardown AWS Session
|
|
run: |
|
|
aws configure --profile s3-upload <<-EOF > /dev/null 2>&1
|
|
null
|
|
null
|
|
null
|
|
text
|
|
EOF
|
|
|
|
build-launcher:
|
|
name: Build Launcher
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 30
|
|
strategy:
|
|
matrix:
|
|
os: [macOS-latest, ubuntu-latest, windows-latest]
|
|
fail-fast: false
|
|
steps:
|
|
- name: Checkout (PR)
|
|
uses: actions/checkout@v2
|
|
if: github.event_name == 'pull_request'
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
- name: Checkout (Branch)
|
|
uses: actions/checkout@v2
|
|
if: github.event_name != 'pull_request'
|
|
- name: Enable Developer Command Prompt (Windows)
|
|
uses: ilammy/msvc-dev-cmd@v1.3.0
|
|
- name: Setup GraalVM Environment
|
|
uses: ayltai/setup-graalvm@v1
|
|
with:
|
|
graalvm-version: ${{ env.graalVersion }}
|
|
java-version: ${{ env.javaVersion }}
|
|
native-image: true
|
|
- name: Set Up SBT
|
|
run: |
|
|
curl -fSL -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
|
|
#- name: Bootstrap the project # As long as launcher doesn't depend on
|
|
# # runtime, bootstrap is not mandatory.
|
|
# run: sbt --no-colors bootstrap
|
|
- name: Build Launcher Native Image
|
|
run: sbt --no-colors launcher/buildNativeImage
|
|
|
|
# Publish
|
|
- name: Prepare distribution directory name (Unix)
|
|
if: runner.os != 'Windows'
|
|
shell: bash
|
|
run: |
|
|
chmod +x enso
|
|
DIST_VERSION=$(./enso version --json | jq -r '.version')
|
|
DIST_ROOT=enso-launcher-$DIST_VERSION-$(echo ${{ runner.os }} | awk '{print tolower($0)}')-amd64
|
|
DIST_DIR=$DIST_ROOT/enso
|
|
echo ::set-env name=DIST_VERSION::$DIST_VERSION
|
|
echo ::set-env name=DIST_DIR::$DIST_DIR
|
|
echo ::set-env name=DIST_ROOT::$DIST_ROOT
|
|
- name: Prepare distribution directory name (Windows)
|
|
if: runner.os == 'Windows'
|
|
shell: bash
|
|
run: |
|
|
DIST_VERSION=$(./enso.exe version --json | jq -r '.version')
|
|
DIST_ROOT=enso-launcher-$DIST_VERSION-$(echo ${{ runner.os }} | awk '{print tolower($0)}')-amd64
|
|
DIST_DIR=$DIST_ROOT/enso
|
|
echo ::set-env name=DIST_VERSION::$DIST_VERSION
|
|
echo ::set-env name=DIST_DIR::$DIST_DIR
|
|
echo ::set-env name=DIST_ROOT::$DIST_ROOT
|
|
|
|
- name: Prepare Launcher distribution (common)
|
|
shell: bash
|
|
run: |
|
|
mkdir -p ${{ env.DIST_DIR }}
|
|
mkdir ${{ env.DIST_DIR }}/bin
|
|
mkdir ${{ env.DIST_DIR }}/dist
|
|
mkdir ${{ env.DIST_DIR }}/runtime
|
|
cp distribution/launcher/.enso.portable ${{ env.DIST_DIR }}
|
|
cp distribution/launcher/README.md ${{ env.DIST_DIR }}
|
|
cp distribution/launcher/NOTICE ${{ env.DIST_DIR }}
|
|
cp -r distribution/launcher/components-licences ${{ env.DIST_DIR }}
|
|
|
|
- name: Prepare Launcher distribution (Unix)
|
|
if: runner.os != 'Windows'
|
|
run: |
|
|
cp enso ${{ env.DIST_DIR }}/bin/
|
|
|
|
- name: Prepare Launcher distribution (Windows)
|
|
if: runner.os == 'Windows'
|
|
shell: bash
|
|
run: |
|
|
cp enso.exe ${{ env.DIST_DIR }}/bin/
|
|
|
|
# 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.
|
|
- name: Publish the Launcher Binary
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ env.DIST_ROOT }}
|
|
path: ${{ env.DIST_ROOT }}
|