Skip to content

CLI

CLI #16

Workflow file for this run

#
# Copyright (c) 2024 Elide Technologies, Inc.
#
# Licensed under the MIT license (the "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://opensource.org/license/mit/
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
#
name: CLI
"on":
workflow_dispatch:
inputs:
## Input: Enable Native Targets
native:
description: "Native"
type: boolean
default: false
## Input: Enable Release Targets
release:
description: "Release"
type: boolean
default: false
## Input: Enable macOS
macos:
description: "Enable macOS"
type: boolean
default: false
## Input: Enable Windows
windows:
description: "Enable Windows"
type: boolean
default: false
## Input: Runner
runner:
description: "Runner"
type: string
default: ubuntu-latest
workflow_call:
inputs:
native:
description: "Native"
type: boolean
default: false
release:
description: "Release"
type: boolean
default: false
macos:
description: "Enable macOS"
type: boolean
default: false
windows:
description: "Enable Windows"
type: boolean
default: false
runner:
description: "Runner to use"
type: string
default: ubuntu-latest
runner_large:
description: "Runner (Large)"
type: string
default: ubuntu-latest-8-cores
runner_large_macos:
description: "Runner (Large, macOS)"
type: string
default: macos-13-xl
runner_large_windows:
description: "Runner (Large, Windows)"
type: string
default: windows-latest-8-cores
secrets:
BUILDLESS_APIKEY:
required: false
description: "Buildless API Key"
BUILDBOT_SERVICE_ACCOUNT:
required: false
description: "GCP Service Account"
GRADLE_CONFIGURATION_KEY:
required: false
description: "Gradle cache key"
env:
BUILDLESS_APIKEY: ${{ secrets.BUILDLESS_APIKEY }}
permissions:
contents: read
jobs:
##
## Job: CLI (Native Debug)
##
cli-build-debug:
name: "CLI: Native (Debug, ${{ matrix.os }}, ${{ matrix.arch || 'amd64' }})"
runs-on: ${{ matrix.runner }}
continue-on-error: true
if: inputs.native
# if: |
# (
# github.ref == 'refs/heads/stable' ||
# startsWith(github.ref, 'release/') ||
# contains(github.event.pull_request.labels.*.name, 'ci:build-cli') ||
# contains(github.event.head_commit.message, 'ci:build-cli')
# )
strategy:
fail-fast: false
matrix:
os: ["macOS"]
arch: ["amd64"]
runner: ["${{ inputs.runner_large || inputs.runner }}"]
labs: [false]
tag: [darwin-amd64]
steps:
- name: "Setup: Harden Runner"
uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1
with:
egress-policy: audit
- name: "Setup: Checkout"
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
with:
submodules: true
persist-credentials: false
- name: "Setup: Cache Restore"
id: cache-restore
uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
key: elide-framework-v1-build-${{ hashFiles('gradle/elide.versions.toml') }}
restore-keys: |
elide-framework-v1-build-${{ hashFiles('gradle/elide.versions.toml') }}
elide-framework-v1-build-
elide-framework-v1-
elide-framework-
path: |
.gradle/
build/
.codebase/
~/.konan
.kotlin/
packages/*/build/bin
packages/*/build/classes
packages/*/build/kotlin
packages/*/build/klib
packages/*/build/generated
packages/*/build/generated-sources
packages/proto/*/build/bin
packages/proto/*/build/classes
packages/proto/*/build/kotlin
packages/proto/*/build/klib
packages/proto/*/build/generated
packages/proto/*/build/generated-sources
tools/elide-build/build/bin
tools/elide-build/build/classes
tools/elide-build/build/kotlin
tools/elide-build/build/klib
tools/elide-build/build/generated
tools/elide-build/build/generated-sources
- id: "auth"
name: "Setup: Authorize Service Account"
uses: google-github-actions/auth@55bd3a7c6e2ae7cf1877fd1ccb9d54c0503c457c # v2.1.2
with:
credentials_json: "${{ secrets.BUILDBOT_SERVICE_ACCOUNT }}"
create_credentials_file: true
export_environment_variables: true
cleanup_credentials: true
- name: "Setup: Buildless"
if: contains(matrix.runner, 'macos') == false
uses: buildless/setup@30e82389418c7f17046606183bc4c78b2c8913e0 # v1.0.2
- name: "Setup: MSVC"
if: contains(matrix.runner, 'windows')
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
with:
arch: ${{ matrix.arch }}
cache: "gradle"
- name: "Setup: GraalVM (Java 22)"
uses: graalvm/setup-graalvm@2f25c0caae5b220866f732832d5e3e29ff493338 # v1.2.1
with:
distribution: "graalvm"
java-version: "22"
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: "Setup: PNPM"
uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
with:
version: "9.1.1"
run_install: |
- recursive: true
args: [--frozen-lockfile, --strict-peer-dependencies]
- name: "Setup: Node"
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: 22
cache: "pnpm"
- name: "Setup: Yarn"
run: pnpm install -g yarn@1.22.19
- name: "Setup: Artifacts"
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
continue-on-error: true
with:
merge-multiple: true
- name: "Build: CLI (Native/Debug)"
uses: gradle/actions/setup-gradle@db19848a5fa7950289d3668fb053140cf3028d43 # v3.3.2
env:
CI: true
BUILDLESS_APIKEY: ${{ secrets.BUILDLESS_APIKEY }}
with:
cache-read-only: true
cache-encryption-key: ${{ secrets.GRADLE_CONFIGURATION_KEY }}
dependency-graph: disabled
arguments: |
:packages:cli:nativeCompile
-Prelease=false
-PbuildMode=dev
--scan
--no-daemon
--warning-mode=none
--dependency-verification=lenient
-Pelide.ci=true
-PbuildSamples=false
-PbuildDocsSite=false
-PbuildDocs=false
- name: "Post-process: Compress (xz)"
if: success() && !contains(matrix.runner, 'windows')
run: |
pushd packages/cli/build/native/nativeCompile;
xz -9kv elide.debug;
popd;
echo "Binary compressed.";
- name: "Artifacts: Debug Binary (Unix)"
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
if: success() && !contains(matrix.runner, 'windows')
with:
name: cli-debug-${{ matrix.tag }}
path: |
./packages/cli/build/native/nativeCompile/elide.debug
./packages/cli/build/native/nativeCompile/elide.debug.debug
./packages/cli/build/native/nativeCompile/elide.debug.xz
./packages/cli/build/native/nativeCompile/resources
./packages/cli/build/native/nativeCompile/*.so
- name: "Artifacts: Debug Binary (Windows)"
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
if: success() && contains(matrix.runner, 'windows')
with:
name: cli-debug-${{ matrix.tag }}
path: |
./packages/cli/build/native/nativeCompile/elide.debug
./packages/cli/build/native/nativeCompile/resources
./packages/cli/build/native/nativeCompile/*.dll
##
## Job: CLI (Native Release)
##
cli-build-release:
name: "CLI: Native (Release, ${{ matrix.os }}, ${{ matrix.arch || 'amd64' }})"
runs-on: ${{ matrix.runner }}
continue-on-error: true
if: inputs.native && inputs.release
# if: |
# (
# github.ref == 'refs/heads/stable' ||
# contains(github.event.pull_request.labels.*.name, 'ci:build-cli') ||
# contains(github.event.head_commit.message, 'ci:build-cli')
# )
strategy:
fail-fast: false
matrix:
os: ["macOS"]
arch: ["amd64"]
runner: ["${{ inputs.runner_large || inputs.runner }}"]
labs: [false]
tag: [darwin-amd64]
steps:
- name: "Setup: Harden Runner"
uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1
with:
egress-policy: audit
- name: "Setup: Checkout"
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
with:
submodules: true
persist-credentials: false
- name: "Setup: Cache Restore"
id: cache-restore
uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
key: elide-framework-v1-build-${{ hashFiles('gradle/elide.versions.toml') }}
restore-keys: |
elide-framework-v1-build-${{ hashFiles('gradle/elide.versions.toml') }}
elide-framework-v1-build-
elide-framework-v1-
elide-framework-
path: |
.gradle/
build/
.codebase/
~/.konan
.kotlin/
packages/*/build/bin
packages/*/build/classes
packages/*/build/kotlin
packages/*/build/klib
packages/*/build/generated
packages/*/build/generated-sources
packages/proto/*/build/bin
packages/proto/*/build/classes
packages/proto/*/build/kotlin
packages/proto/*/build/klib
packages/proto/*/build/generated
packages/proto/*/build/generated-sources
tools/elide-build/build/bin
tools/elide-build/build/classes
tools/elide-build/build/kotlin
tools/elide-build/build/klib
tools/elide-build/build/generated
tools/elide-build/build/generated-sources
- name: "Setup: Buildless"
if: contains(matrix.runner, 'macos') == false
uses: buildless/setup@30e82389418c7f17046606183bc4c78b2c8913e0 # v1.0.2
- id: "auth"
name: "Setup: Authorize Service Account"
uses: google-github-actions/auth@55bd3a7c6e2ae7cf1877fd1ccb9d54c0503c457c # v2.1.2
with:
credentials_json: "${{ secrets.BUILDBOT_SERVICE_ACCOUNT }}"
create_credentials_file: true
export_environment_variables: true
cleanup_credentials: true
- name: "Setup: MSVC"
if: contains(matrix.runner, 'windows')
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
with:
arch: ${{ matrix.arch }}
- name: "Setup: GraalVM (Java 22)"
uses: graalvm/setup-graalvm@2f25c0caae5b220866f732832d5e3e29ff493338 # v1.2.1
with:
distribution: "graalvm"
java-version: "22"
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: "Setup: Node"
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: 22
- name: "Setup: PNPM"
uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
with:
version: "9.1.1"
run_install: |
- recursive: true
args: [--frozen-lockfile, --strict-peer-dependencies]
- name: "Setup: Yarn"
run: pnpm install -g yarn@1.22.19
- name: "Setup: Artifacts"
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
continue-on-error: true
with:
merge-multiple: true
- name: "Build: CLI (Native/Release)"
uses: gradle/actions/setup-gradle@db19848a5fa7950289d3668fb053140cf3028d43 # v3.3.2
env:
CI: true
BUILDLESS_APIKEY: ${{ secrets.BUILDLESS_APIKEY }}
with:
cache-read-only: true
cache-encryption-key: ${{ secrets.GRADLE_CONFIGURATION_KEY }}
dependency-graph: disabled
arguments: |
:packages:cli:nativeOptimizedCompile
:packages:cli:dist
-x :packages:cli:nativeCompile
-Prelease=true
-PbuildMode=release
--scan
--no-daemon
--warning-mode=none
--dependency-verification=lenient
-Pelide.ci=true
-PbuildSamples=false
-PbuildDocsSite=false
-PbuildDocs=false
- name: "Artifacts: Release Binary"
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
if: success()
with:
name: cli-release-${{ matrix.tag }}
path: |
./packages/cli/build/native/nativeOptimizedCompile/elide
./packages/cli/build/native/nativeOptimizedCompile/resources
./packages/cli/build/native/nativeOptimizedCompile/*.so