Original commit: 66e45cd1dd
This commit is contained in:
Wojciech Daniło 2021-02-02 06:07:43 +01:00 committed by GitHub
parent 3fe294187f
commit 74619c6731
30 changed files with 1440 additions and 577 deletions

View File

@ -13,6 +13,7 @@
### Checklist ### Checklist
Please include the following checklist in your PR: Please include the following checklist in your PR:
- [ ] The `CHANGELOG.md` was updated with the changes introduced in this PR.
- [ ] The documentation has been updated if necessary. - [ ] The documentation has been updated if necessary.
- [ ] All code conforms to the [Rust](https://github.com/enso-org/enso/blob/main/docs/style-guide/rust.md) style guide. - [ ] All code conforms to the [Rust](https://github.com/enso-org/enso/blob/main/docs/style-guide/rust.md) style guide.
- [ ] All code has automatic tests where possible. - [ ] All code has automatic tests where possible.
@ -21,4 +22,3 @@ Please include the following checklist in your PR:
- [ ] All code has been manually tested in the "debug/interface" scene. - [ ] All code has been manually tested in the "debug/interface" scene.
- [ ] All code has been manually tested by the PR owner against our [test scenarios](https://docs.google.com/spreadsheets/d/1RatJDM_f9_3bvYhl3Bpq2d8SyKgtVdrV1RkGxPU17c8/edit?ts=5faa7049#gid=0). - [ ] All code has been manually tested by the PR owner against our [test scenarios](https://docs.google.com/spreadsheets/d/1RatJDM_f9_3bvYhl3Bpq2d8SyKgtVdrV1RkGxPU17c8/edit?ts=5faa7049#gid=0).
- [ ] All code has been manually tested by at least one reviewer against our [test scenarios](https://docs.google.com/spreadsheets/d/1RatJDM_f9_3bvYhl3Bpq2d8SyKgtVdrV1RkGxPU17c8/edit?ts=5faa7049#gid=0). - [ ] All code has been manually tested by at least one reviewer against our [test scenarios](https://docs.google.com/spreadsheets/d/1RatJDM_f9_3bvYhl3Bpq2d8SyKgtVdrV1RkGxPU17c8/edit?ts=5faa7049#gid=0).

View File

@ -1,122 +0,0 @@
name: Build (MacOS, Linux, Windows)
on:
push:
branches: main
# Please check if all components are available before updating the rust toolchain version.
# https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu.html
jobs:
build:
name: Build
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, macOS-latest, ubuntu-latest]
fail-fast: false
steps:
- uses: actions/checkout@v1
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install wasm-pack (MacOS)
# We could use cargo install wasm-pack, but that takes 3.5 minutes compared to few seconds.
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-apple-darwin
run: |
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'macOS-latest'
- name: Install wasm-pack (Linux)
# We could use cargo install wasm-pack, but that takes 3.5 minutes compared to few seconds.
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-unknown-linux-musl
run: |
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'ubuntu-latest'
- name: Install wasm-pack (Windows)
# We could use cargo install wasm-pack, but that takes 3.5 minutes compared to few seconds.
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-pc-windows-msvc
run: |
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'windows-latest'
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: '14.15.0'
- name: Build (Ubuntu)
run: node ./run dist --skip-version-validation --target linux
if: matrix.os == 'ubuntu-latest'
- name: Build (Windows)
run: node ./run dist --skip-version-validation --target win
if: matrix.os == 'windows-latest'
- name: Build (MacOs)
run: node ./run dist --skip-version-validation --target macos
if: matrix.os == 'macos-latest'
- name: Upload Artifacts (Ubuntu, AppImage)
uses: actions/upload-artifact@v1
with:
name: Enso IDE (Linux, AppImage)
path: dist/client/Enso-2.0.0-alpha.0.AppImage
if: matrix.os == 'ubuntu-latest'
- name: Upload Artifacts (Ubuntu, not packed)
uses: actions/upload-artifact@v1
with:
name: Enso IDE (Linux, not packed)
path: dist/client/linux-unpacked
if: matrix.os == 'ubuntu-latest'
- name: Upload Artifacts (Windows, Installer)
uses: actions/upload-artifact@v1
if: matrix.os == 'windows-latest'
with:
name: Enso IDE (Windows, installer)
path: dist/client/Enso Setup 2.0.0-alpha.0.exe
- name: Upload Artifacts (Windows, not packed)
uses: actions/upload-artifact@v1
if: matrix.os == 'windows-latest'
with:
name: Enso IDE (Windows, not packed)
path: dist/client/win-unpacked
- name: Upload Artifacts (macOS, dmg)
uses: actions/upload-artifact@v1
if: matrix.os == 'macos-latest'
with:
name: Enso IDE (macOS, dmg)
path: dist/client/Enso-2.0.0-alpha.0.dmg
- name: Upload Artifacts (macOS, app)
uses: actions/upload-artifact@v1
if: matrix.os == 'macos-latest'
with:
name: Enso IDE (macOS, app)
path: dist/client/mac/Enso.app

View File

@ -1,168 +0,0 @@
name: Check
on: [push]
# Please check if all components are available before updating the rust toolchain version.
# https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu.html
# TODO
# We might want to select the latest LTS node version automatically (right now we have hardcoded
# the '14.15.0' version below), but this issue needs to be resolved first:
# https://github.com/actions/setup-node/pull/58
jobs:
build:
name: Build
runs-on: macOS-latest
steps:
- uses: actions/checkout@v1
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install wasm-pack
# We could use cargo install wasm-pack, but that takes 3.5 minutes compared to few seconds.
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-apple-darwin
run: |
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: '14.15.0'
- name: Build
run: node ./run build --skip-version-validation
check:
name: Linter
runs-on: macOS-latest
steps:
- uses: actions/checkout@v1
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: '14.15.0'
- name: Install prettier
run: npm install --save-dev --save-exact prettier
- name: Lint JS
run: npx prettier --check "src/**/*.js"
- name: Install Clippy
run: rustup component add clippy
- name: Building Rust Sources
run: node ./run lint --skip-version-validation
test:
name: Tests
runs-on: macOS-latest
steps:
- uses: actions/checkout@v1
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: '14.15.0'
- name: Run tests
run: node ./run test --no-wasm --skip-version-validation
wasm-test:
name: WASM Tests
runs-on: macOS-latest
steps:
- uses: actions/checkout@v1
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install wasm-pack
# We could use cargo install wasm-pack, but that takes 3.5 minutes compared to few seconds.
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-apple-darwin
run: |
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: '14.15.0'
- name: Run tests
run: node ./run test --no-native --skip-version-validation
# TODO: enable after fixing https://github.com/actions-rs/grcov/issues/50
# coverage:
# name: Coverage
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v1
#
# - name: Install Rust
# uses: actions-rs/toolchain@v1
# with:
# toolchain: nightly-2019-11-04
# override: true
#
# - name: Install Node
# uses: actions/setup-node@v1
# with:
# node-version: '14.15.0'
#
# - name: Generate test profile
# working-directory: src/rust
# run: cargo test --all-features --no-fail-fast
# env:
# 'CARGO_INCREMENTAL': '0'
# 'RUSTFLAGS': '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads'
#
# - name: Generate coverage report
# id: coverage
# uses: actions-rs/grcov@v0.1
#
# - name: Show the coverage report
# run: cat ${{ steps.coverage.outputs.report }}
#
# - name: Upload the coverage report
# uses: codecov/codecov-action@v1.0.2
# with:
# token: ${{ secrets.CODECOV_TOKEN }}
# file: ./lcov.info

View File

@ -1,63 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
name: "CodeQL"
on:
push:
branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ main ]
schedule:
- cron: '26 15 * * 5'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@ -1,39 +0,0 @@
name: Publish Developer Docs
on:
push:
branches:
- main
paths:
- 'docs/**'
jobs:
checkout:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
repository: 'enso-org/enso-org.github.io'
ref: 'sources'
token: ${{ secrets.ENSO_PAT }}
- name: set identity email
run: git config --global user.email "actions@github.com"
- name: set identity name
run: git config --global user.name "GitHub Actions"
- name: Checkout submodules
run: git submodule update --init
- name: Update submodules
id: status
run: |
git submodule update --init
git submodule update --remote --merge
if [ -n "$(git status --porcelain)" ]; then
echo "::set-output name=has_changes::1"
fi
- name: Push changes
run: |
git add .
git commit -m "Update submodules"
git push origin sources
if: steps.status.outputs.has_changes == '1'

423
gui/.github/workflows/gui-ci.yml vendored Normal file
View File

@ -0,0 +1,423 @@
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# DO NOT CHANGE THIS FILE. IT WAS GENERATED FROM 'build/workflow.js'. READ DOCS THERE TO LEARN MORE.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
name: GUI CI
'on':
- push
jobs:
version_assertions:
name: Version Assertions
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- macOS-latest
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Read changelog info
id: changelog
run: |2-
node ./run ci-gen --skip-version-validation
content=`cat CURRENT_RELEASE_CHANGELOG.json`
echo "::set-output name=content::$content"
shell: bash
- name: Assert Version Unstable
run: node ./run assert-version-unstable --skip-version-validation
if: github.ref == 'refs/heads/unstable'
- name: Assert Version Stable
run: node ./run assert-version-stable --skip-version-validation
if: github.ref == 'refs/heads/stable'
- id: checkCurrentReleaseTag
uses: mukunku/tag-exists-action@v1.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag: v${{fromJson(steps.changelog.outputs.content).version}}
- name: Fail if release already exists
run: >-
if [[ ${{ steps.checkCurrentReleaseTag.outputs.exists }} == true ]];
then exit 1; fi
lint:
name: Linter
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- macOS-latest
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: 14.15.0
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install Prettier
run: npm install --save-dev --save-exact prettier
- name: Install Clippy
run: rustup component add clippy
- name: Lint JavaScript sources
run: npx prettier --check 'src/**/*.js'
- name: Lint Rust sources
run: node ./run lint --skip-version-validation
test:
name: Tests
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- macOS-latest
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: 14.15.0
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Run tests (no WASM)
run: node ./run test --no-wasm --skip-version-validation
wasm-test:
name: WASM Tests
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- macOS-latest
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: 14.15.0
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install wasm-pack (macOS)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-apple-darwin
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'macOS-latest'
- name: Install wasm-pack (Windows)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-pc-windows-msvc
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'windows-latest'
- name: Install wasm-pack (Linux)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-unknown-linux-musl
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'ubuntu-latest'
- name: Run tests (WASM)
run: node ./run test --no-native --skip-version-validation
simple_build:
name: Simple Build (WASM size limit check)
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- macOS-latest
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: 14.15.0
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install wasm-pack (macOS)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-apple-darwin
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'macOS-latest'
- name: Install wasm-pack (Windows)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-pc-windows-msvc
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'windows-latest'
- name: Install wasm-pack (Linux)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-unknown-linux-musl
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'ubuntu-latest'
- name: Build (macos)
run: node ./run dist --skip-version-validation --target macos
if: matrix.os == 'macos-latest'
if: >-
!(contains(github.event.head_commit.message,'[ci build]') || github.ref ==
'refs/heads/main' || github.ref == 'refs/heads/develop' || github.ref ==
'refs/heads/unstable' || github.ref == 'refs/heads/stable')
build:
name: Build
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- windows-latest
- macOS-latest
- ubuntu-latest
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Read changelog info
id: changelog
run: |2-
node ./run ci-gen --skip-version-validation
content=`cat CURRENT_RELEASE_CHANGELOG.json`
echo "::set-output name=content::$content"
shell: bash
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: 14.15.0
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2019-11-04
override: true
- name: Install wasm-pack (macOS)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-apple-darwin
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'macOS-latest'
- name: Install wasm-pack (Windows)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-pc-windows-msvc
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'windows-latest'
- name: Install wasm-pack (Linux)
env:
WASMPACKURL: https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1
WASMPACKDIR: wasm-pack-v0.9.1-x86_64-unknown-linux-musl
run: |2-
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR
shell: bash
if: matrix.os == 'ubuntu-latest'
- name: Build (macos)
run: node ./run dist --skip-version-validation --target macos
if: matrix.os == 'macos-latest'
- name: Build (win)
run: node ./run dist --skip-version-validation --target win
if: matrix.os == 'windows-latest'
- name: Build (linux)
run: node ./run dist --skip-version-validation --target linux
if: matrix.os == 'ubuntu-latest'
- name: Upload Content Artifacts
uses: actions/upload-artifact@v1
with:
name: content
path: dist/content
if: matrix.os == 'macOS-latest'
- name: Upload Artifacts (Linux, AppImage)
uses: actions/upload-artifact@v1
with:
name: >-
enso-linux-${{fromJson(steps.changelog.outputs.content).version}}.AppImage
path: >-
dist/client/enso-linux-${{fromJson(steps.changelog.outputs.content).version}}.AppImage
if: matrix.os == 'ubuntu-latest'
- name: Upload Artifacts (Windows, exe)
uses: actions/upload-artifact@v1
with:
name: enso-win-${{fromJson(steps.changelog.outputs.content).version}}.exe
path: >-
dist/client/enso-win-${{fromJson(steps.changelog.outputs.content).version}}.exe
if: matrix.os == 'windows-latest'
- name: Upload Artifacts (macOS, dmg)
uses: actions/upload-artifact@v1
with:
name: enso-mac-${{fromJson(steps.changelog.outputs.content).version}}.dmg
path: >-
dist/client/enso-mac-${{fromJson(steps.changelog.outputs.content).version}}.dmg
if: matrix.os == 'macos-latest'
if: >-
contains(github.event.head_commit.message,'[ci build]') || github.ref ==
'refs/heads/main' || github.ref == 'refs/heads/develop' || github.ref ==
'refs/heads/unstable' || github.ref == 'refs/heads/stable'
release_to_github:
name: GitHub Release
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- macOS-latest
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Download artifacts
uses: actions/download-artifact@v2
with:
path: artifacts
- name: Read changelog info
id: changelog
run: |2-
node ./run ci-gen --skip-version-validation
content=`cat CURRENT_RELEASE_CHANGELOG.json`
echo "::set-output name=content::$content"
shell: bash
- id: checkCurrentReleaseTag
uses: mukunku/tag-exists-action@v1.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag: v${{fromJson(steps.changelog.outputs.content).version}}
- name: Fail if release already exists
run: >-
if [[ ${{ steps.checkCurrentReleaseTag.outputs.exists }} == true ]];
then exit 1; fi
- name: Upload GitHub Release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: artifacts/**/enso-*
name: Enso ${{fromJson(steps.changelog.outputs.content).version}}
tag_name: v${{fromJson(steps.changelog.outputs.content).version}}
body: ${{fromJson(steps.changelog.outputs.content).body}}
prerelease: ${{fromJson(steps.changelog.outputs.content).prerelease}}
if: github.ref == 'refs/heads/unstable' || github.ref == 'refs/heads/stable'
needs:
- version_assertions
- lint
- test
- wasm-test
- build
release_to_cdn:
name: CDN Release
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Download artifacts
uses: actions/download-artifact@v2
with:
path: artifacts
- name: Read changelog info
id: changelog
run: |2-
node ./run ci-gen --skip-version-validation
content=`cat CURRENT_RELEASE_CHANGELOG.json`
echo "::set-output name=content::$content"
shell: bash
- shell: bash
run: |2-
aws configure --profile s3-upload <<-EOF > /dev/null 2>&1
${{ secrets.ARTEFACT_S3_ACCESS_KEY_ID }}
${{ secrets.ARTEFACT_S3_SECRET_ACCESS_KEY }}
us-west-1
text
EOF
- name: Upload 'index.js.gz' to CDN
shell: bash
run: >-
aws s3 cp ./artifacts/content/assets/index.js.gz
s3://ensocdn/ide/${{fromJson(steps.changelog.outputs.content).version}}/index.js.gz
--profile s3-upload --acl public-read --content-encoding gzip
- name: Upload 'style.css' to CDN
shell: bash
run: >-
aws s3 cp ./artifacts/content/assets/style.css
s3://ensocdn/ide/${{fromJson(steps.changelog.outputs.content).version}}/style.css
--profile s3-upload --acl public-read --content-encoding gzip
- name: Upload 'ide.wasm' to CDN
shell: bash
run: >-
aws s3 cp ./artifacts/content/assets/ide.wasm
s3://ensocdn/ide/${{fromJson(steps.changelog.outputs.content).version}}/ide.wasm
--profile s3-upload --acl public-read --content-encoding gzip
- name: Upload 'wasm_imports.js.gz' to CDN
shell: bash
run: >-
aws s3 cp ./artifacts/content/assets/wasm_imports.js.gz
s3://ensocdn/ide/${{fromJson(steps.changelog.outputs.content).version}}/wasm_imports.js.gz
--profile s3-upload --acl public-read --content-encoding gzip
if: github.ref == 'refs/heads/unstable' || github.ref == 'refs/heads/stable'
needs:
- version_assertions
- lint
- test
- wasm-test
- build

View File

@ -1,106 +0,0 @@
name: Release CI
on:
push:
tags:
- "ide-*.*.*"
env:
rustToolchain: nightly-2019-11-04
jobs:
build:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
fail-fast: true
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Rust
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: ${{ env.rustToolchain }}
override: true
- name: Install wasm-pack
uses: actions-rs/cargo@v1
with:
command: install
args: wasm-pack --version 0.9.1
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: '14.15.0'
- name: Build
run: node ./run dist --skip-version-validation
- name: Upload Artifacts
uses: actions/upload-artifact@v1
with:
name: ide-dist
path: dist/content
upload-cdn:
name: Prepare Release
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/download-artifact@v2
with:
path: artifacts
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: '14.15.0'
- name: Prepare Distribution Version
shell: bash
run: |
ref=${{ github.ref }}
refversion=${ref#"refs/tags/ide-"}
echo "DIST_VERSION=$refversion" >> $GITHUB_ENV
- name: Prepare AWS Session
shell: bash
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-1
text
EOF
- name: Upload the index.js to S3
shell: bash
run: >
aws s3 cp ./artifacts/ide-dist/assets/index.js.gz
s3://ensocdn/ide/${{ env.DIST_VERSION }}/index.js.gz --profile
s3-upload --acl public-read --content-encoding gzip
- name: Upload the style.css to S3
shell: bash
run: >
aws s3 cp ./artifacts/ide-dist/assets/style.css
s3://ensocdn/ide/${{ env.DIST_VERSION }}/style.css --profile
s3-upload --acl public-read --content-encoding gzip
- name: Upload the ide.wasm to S3
shell: bash
run: >
aws s3 cp ./artifacts/ide-dist/assets/ide.wasm
s3://ensocdn/ide/${{ env.DIST_VERSION }}/ide.wasm --profile
s3-upload --acl public-read --content-type 'application/wasm'
- name: Upload the wasm_imports.js to S3
shell: bash
run: >
aws s3 cp ./artifacts/ide-dist/assets/wasm_imports.js.gz
s3://ensocdn/ide/${{ env.DIST_VERSION }}/wasm_imports.js.gz --profile
s3-upload --acl public-read --content-encoding gzip

32
gui/CHANGELOG.md Normal file
View File

@ -0,0 +1,32 @@
# Next Release
This is a minor update exposing more control over the anonymous data collection. You are now allowed
to run the application with `--no-errors-data-collection`, and `--no-data-collection`. The options
disable the collection of errors data (keeping the collection of other events), and disables the
collection of all data, respectively. To learn more what data is collected in Enso alpha releases,
read the notes of the `Enso 2.0.0-alpha.1` release.
# Enso 2.0.0-alpha.1 (2020-01-26)
This is the first release of Enso, a general-purpose programming language and environment for
interactive data processing. It is a tool that spans the entire stack, going from high-level
visualization and communication to the nitty-gritty of backend services, all in a single language.
<br/>![Release Notes](/docs/assets/tags/release_notes.svg)
#### Anonymous Data Collection
Please note that this release collects anonymous usage data which will be used to improve Enso and
prepare it for a stable release. We will switch to opt-in data collection in stable version
releases. The usage data will not contain your code (expressions above nodes), however, reported
errors may contain brief snippets of out of context code that specifically leads to the error, like
"the method 'foo' does not exist on Number". The following data will be collected:
- Session length.
- Graph editing events (node create, dele, position change, connect, disconnect, collapse, edit
start, edit end). This will not include any information about node expressions used.
- Navigation events (camera movement, scope change).
- Visualization events (visualization open, close, switch). This will not include any information
about the displayed data nor the rendered visualization itself.
- Project management events (project open, close, rename).
- Errors (IDE crashes, WASM panics, Project Manager errors, Language Server errors, Compiler
errors).
- Performance statistics (minimum, maximum, average GUI refresh rate).

View File

@ -42,16 +42,16 @@
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
} }
}, },
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
}, },
"binaryen": {
"version": "91.0.0",
"resolved": "https://registry.npmjs.org/binaryen/-/binaryen-91.0.0.tgz",
"integrity": "sha512-IPeiSHceT5/VXOQ9W4f9k/ryoA1QGdCvpeyFPKsIZQvctN8e1xgvVFK5HHxgfAPf2gWy+plrFdJK5xSe4W8cFQ=="
},
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -164,6 +164,14 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
}, },
"js-yaml": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
"integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
"requires": {
"argparse": "^2.0.1"
}
},
"locate-path": { "locate-path": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@ -172,6 +180,14 @@
"p-locate": "^4.1.0" "p-locate": "^4.1.0"
} }
}, },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
"yallist": "^4.0.0"
}
},
"minimatch": { "minimatch": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@ -264,6 +280,14 @@
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
}, },
"semver": {
"version": "7.3.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"requires": {
"lru-cache": "^6.0.0"
}
},
"set-blocking": { "set-blocking": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@ -312,6 +336,11 @@
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
}, },
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"yargs": { "yargs": {
"version": "15.3.0", "version": "15.3.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz",

View File

@ -4,10 +4,11 @@
"description": "Build Scripts", "description": "Build Scripts",
"repository": "git@github.com:enso-org/ide.git", "repository": "git@github.com:enso-org/ide.git",
"dependencies": { "dependencies": {
"binaryen": "^91.0.0",
"glob": "^7.1.6", "glob": "^7.1.6",
"ncp": "^2.0.0", "ncp": "^2.0.0",
"yargs": "^15.3.0" "yargs": "^15.3.0",
"js-yaml": "4.0.0",
"semver": "7.3.4"
}, },
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {

View File

@ -16,12 +16,17 @@ paths.script.main = path.join(paths.root,'run')
paths.script.root = path.join(paths.root,'build') paths.script.root = path.join(paths.root,'build')
paths.script.run = path.join(paths.script.root,'run') paths.script.run = path.join(paths.script.root,'run')
paths.github = {}
paths.github.root = path.join(paths.root,'.github')
paths.github.workflows = path.join(paths.github.root,'workflows')
paths.dist = {} paths.dist = {}
paths.dist.root = path.join(paths.root,'dist') paths.dist.root = path.join(paths.root,'dist')
paths.dist.client = path.join(paths.dist.root,'client') paths.dist.client = path.join(paths.dist.root,'client')
paths.dist.content = path.join(paths.dist.root,'content') paths.dist.content = path.join(paths.dist.root,'content')
paths.dist.bin = path.join(paths.dist.root, 'bin') paths.dist.bin = path.join(paths.dist.root, 'bin')
paths.dist.init = path.join(paths.dist.root,'init') paths.dist.init = path.join(paths.dist.root,'init')
paths.dist.buildInit = path.join(paths.dist.root,'build-init')
paths.dist.buildInfo = path.join(paths.dist.root,'build.json') paths.dist.buildInfo = path.join(paths.dist.root,'build.json')
paths.dist.wasm = {} paths.dist.wasm = {}

187
gui/build/release.js Normal file
View File

@ -0,0 +1,187 @@
/// Package release utilities. Especially, utilities to load `CHANGELOG.md`, extract the newest
/// entry, and use it to generate package version and description.
const fss = require('fs')
const path = require('path')
const paths = require('./paths')
const semver = require('semver')
// =================
// === Constants ===
// =================
const CHANGELOG_FILE_NAME = 'CHANGELOG.md'
const CHANGELOG_FILE = path.join(paths.root,CHANGELOG_FILE_NAME)
// ===============
// === Version ===
// ===============
class NextReleaseVersion {
/// Version used for config files when building the package with "next version" in changelog.
toString() {
return "0.0.0"
}
isPrerelease() {
return true
}
}
class Version {
constructor(major,minor,patch,tag,tagVersion) {
this.major = major
this.minor = minor
this.patch = patch
this.tag = tag
this.tagVersion = tagVersion
}
lt(that) {
if (this.major < that.major) { return true }
if (this.minor < that.minor) { return true }
if (this.patch < that.patch) { return true }
if (this.tag === 'alpha' && that.tag === 'beta') { return true }
if (this.tag === 'alpha' && that.tag === 'rc') { return true }
if (this.tag === 'beta' && that.tag === 'rc') { return true }
if (this.tagVersion < that.tagVersion) { return true }
return false
}
isPrerelease() {
if (this.tag) { return true } else { return false }
}
toString() {
let suffix = ''
if (this.tag) {
suffix = `-${this.tag}.${this.tagVersion}`
}
return `${this.major}.${this.minor}.${this.patch}${suffix}`
}
}
// ======================
// === ChangelogEntry ===
// ======================
class ChangelogEntry {
constructor(version,body) {
this.version = version
this.body = body
}
assert_is_newest_version_defined() {
if (this.version instanceof NextReleaseVersion) {
throw `The newest entry in CHANGELOG.md does not have version assigned.`
}
}
assert_is_unstable() {
assert_is_newest_version_defined()
if (!this.isPrerelease()) {
throw "Assertion failed. The version is stable."
}
}
assert_is_stable() {
assert_is_newest_version_defined()
if (this.isPrerelease()) {
throw "Assertion failed. The version is unstable."
}
}
isPrerelease() {
return this.version.isPrerelease()
}
}
// =================
// === Changelog ===
// =================
class Changelog {
constructor() {
this.entries = changelogEntries()
}
newestEntry() {
return this.entries[0]
}
currentVersion() {
return this.newestEntry().version
}
}
function changelogSections() {
let text = '\n' + fss.readFileSync(CHANGELOG_FILE,"utf8")
let chunks = text.split(/\r?\n#(?!#)/)
return chunks.filter((s) => s != '')
}
function changelogEntries() {
let sections = changelogSections()
let entries = []
let firstSection = true
for (let section of sections) {
let splitPoint = section.indexOf('\n')
let header = section.substring(0,splitPoint)
let body = section.substring(splitPoint).trim()
if (firstSection && header.startsWith(' Next Release')) {
let version = new NextReleaseVersion
entries.push(new ChangelogEntry(version,body))
} else {
let headerReg = /^ Enso (?<major>[0-9]+)\.(?<minor>[0-9]+)\.(?<patch>[0-9]+)(-(?<tag>alpha|beta|rc)\.(?<tagVersion>[0-9]+))? \((?<year>[0-9][0-9][0-9][0-9])-(?<month>[0-9][0-9])-(?<day>[0-9][0-9])\)/
let match = header.match(headerReg)
if (!match) {
throw `Improper changelog entry header: '${header}'. See the 'CHANGELOG_TEMPLATE.md' for details.`
}
let grps = match.groups
let version = new Version(grps.major,grps.minor,grps.patch,grps.tag,grps.tagVersion)
entries.push(new ChangelogEntry(version,body))
}
firstSection = false
}
let firstEntry = true
let lastVersion = null
for (let entry of entries) {
if (!(firstEntry && entry.version instanceof NextReleaseVersion)) {
if (lastVersion !== null) {
if (!entry.version.lt(lastVersion)) {
let v1 = entry.version.toString()
let v2 = lastVersion.toString()
throw `Versions are not properly ordered in the changelog (${v1} >= ${v2}).`
}
}
lastVersion = entry.version
}
firstEntry = false
}
return entries
}
function changelog() {
return new Changelog
}
function currentVersion() {
return changelog().currentVersion()
}
// ===============
// === Exports ===
// ===============
module.exports = {Version,NextReleaseVersion,changelog,currentVersion}

View File

@ -1,30 +1,29 @@
const cmd = require('./cmd')
const fs = require('fs').promises
const fss = require('fs')
const glob = require('glob')
const ncp = require('ncp').ncp
const os = require('os')
const path = require('path')
const paths = require('./paths')
const prettier = require("prettier")
const stream = require('stream')
const yargs = require('yargs')
const zlib = require('zlib')
const child_process = require('child_process') const child_process = require('child_process')
const cmd = require('./cmd')
process.on('unhandledRejection', error => { throw(error) }) const fs = require('fs').promises
process.chdir(paths.root) const fss = require('fs')
const glob = require('glob')
const ncp = require('ncp').ncp
const os = require('os')
const path = require('path')
const paths = require('./paths')
const prettier = require("prettier")
const release = require('./release')
const stream = require('stream')
const workflow = require('./workflow')
const yargs = require('yargs')
const zlib = require('zlib')
const { promisify } = require('util') const { promisify } = require('util')
const pipe = promisify(stream.pipeline) const pipe = promisify(stream.pipeline)
async function gzip(input, output) {
const gzip = zlib.createGzip()
const source = fss.createReadStream(input) // ==============
const destination = fss.createWriteStream(output) // === Errors ===
await pipe(source,gzip,destination) // ==============
}
process.on('unhandledRejection', error => { throw(error) })
process.chdir(paths.root)
@ -46,6 +45,13 @@ let targetArgs = undefined
// === Utils === // === Utils ===
// ============= // =============
async function gzip(input, output) {
const gzip = zlib.createGzip()
const source = fss.createReadStream(input)
const destination = fss.createWriteStream(output)
await pipe(source,gzip,destination)
}
/// Copy files and directories. /// Copy files and directories.
async function copy(src,tgt) { async function copy(src,tgt) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -95,6 +101,8 @@ function run_project_manager() {
}) })
} }
// ================ // ================
// === Commands === // === Commands ===
// ================ // ================
@ -110,7 +118,10 @@ commands.clean.js = async function() {
await cmd.with_cwd(paths.js.root, async () => { await cmd.with_cwd(paths.js.root, async () => {
await run('npm',['run','clean']) await run('npm',['run','clean'])
}) })
try { await fs.unlink(paths.dist.init) } catch {} try {
await fs.unlink(paths.dist.init)
await fs.unlink(paths.dist.buildInit)
} catch {}
} }
commands.clean.rust = async function() { commands.clean.rust = async function() {
@ -136,6 +147,7 @@ commands.build.options = {
} }
} }
commands.build.js = async function() { commands.build.js = async function() {
await installJsDeps()
console.log(`Building JS target.`) console.log(`Building JS target.`)
await run('npm',['run','build']) await run('npm',['run','build'])
} }
@ -192,6 +204,7 @@ commands.start.rust = async function(argv) {
} }
commands.start.js = async function (argv) { commands.start.js = async function (argv) {
await installJsDeps()
console.log(`Building JS target.` + argv) console.log(`Building JS target.` + argv)
const args = targetArgs.concat([ const args = targetArgs.concat([
`--backend-path ${paths.get_project_manager_path(paths.dist.bin)}`, `--backend-path ${paths.get_project_manager_path(paths.dist.bin)}`,
@ -272,6 +285,7 @@ commands.watch.rust = async function(argv) {
} }
commands.watch.js = async function() { commands.watch.js = async function() {
await installJsDeps()
await cmd.with_cwd(paths.js.root, async () => { await cmd.with_cwd(paths.js.root, async () => {
await run('npm',['run','watch']) await run('npm',['run','watch'])
}) })
@ -286,12 +300,42 @@ commands.dist.rust = async function(argv) {
} }
commands.dist.js = async function() { commands.dist.js = async function() {
await installJsDeps()
await cmd.with_cwd(paths.js.root, async () => { await cmd.with_cwd(paths.js.root, async () => {
await run('npm',['run','dist']) await run('npm',['run','dist'])
}) })
} }
// === CI Gen ===
/// The command is used by CI to generate the file `CURRENT_RELEASE_CHANGELOG.json`, which contains
/// information about the newest release. It is then used by CI to generate version and description
/// of the product release.
commands['ci-gen'] = command(`Generate CI build related files`)
commands['ci-gen'].rust = async function(argv) {
let entry = release.changelog().newestEntry()
let body = entry.body
let version = entry.version.toString()
let prerelease = entry.isPrerelease()
let obj = {version,body,prerelease};
let json = JSON.stringify(obj)
fss.writeFileSync(path.join(paths.root,'CURRENT_RELEASE_CHANGELOG.json'),json)
}
/// Asserts whether the current version of the package (newest in CHANGELOG.md) is unstable.
commands['assert-version-unstable'] = command(`Assert the current version is unstable`)
commands['assert-version-unstable'].rust = async function(argv) {
let entry = release.changelog().newestEntry().assert_is_unstable()
}
/// Asserts whether the current version of the package (newest in CHANGELOG.md) is stable.
commands['assert-version-stable'] = command(`Assert the current version is stable`)
commands['assert-version-stable'].rust = async function(argv) {
let entry = release.changelog().newestEntry().assert_is_stable()
}
// =========================== // ===========================
// === Command Line Parser === // === Command Line Parser ===
@ -378,7 +422,7 @@ for (let command of commandList) {
function defaultConfig() { function defaultConfig() {
return { return {
version: "2.0.0-alpha.0", version: `${release.currentVersion()}`,
author: { author: {
name: "Enso Team", name: "Enso Team",
email: "contact@enso.org" email: "contact@enso.org"
@ -419,10 +463,10 @@ async function processPackageConfigs() {
// ============ // ============
async function updateBuildVersion (argv) { async function updateBuildVersion (argv) {
const target = get_target_platform(argv) const target = get_target_platform(argv)
let config = {} let config = {}
let configPath = paths.dist.buildInfo let configPath = paths.dist.buildInfo
let exists = fss.existsSync(configPath) let exists = fss.existsSync(configPath)
if(exists) { if(exists) {
let configFile = await fs.readFile(configPath) let configFile = await fs.readFile(configPath)
config = JSON.parse(configFile) config = JSON.parse(configFile)
@ -452,7 +496,8 @@ async function installJsDeps() {
await cmd.run('npm',['run','install']) await cmd.run('npm',['run','install'])
}) })
await fs.mkdir(paths.dist.root, {recursive:true}) await fs.mkdir(paths.dist.root, {recursive:true})
await fs.open(paths.dist.init,'w') let handle = await fs.open(paths.dist.init,'w')
await handle.close()
} }
} }
@ -511,13 +556,8 @@ async function main () {
let argv = optParser.parse() let argv = optParser.parse()
await updateBuildVersion(argv) await updateBuildVersion(argv)
await processPackageConfigs() await processPackageConfigs()
workflow.generate()
let command = argv._[0] let command = argv._[0]
if(command === 'clean') {
try { await fs.unlink(paths.dist.init) } catch {}
} else {
await installJsDeps()
}
await runCommand(command,argv) await runCommand(command,argv)
} }

402
gui/build/workflow.js Normal file
View File

@ -0,0 +1,402 @@
/// GitHub workflow generator. We are using custom generator in order to re-use sub-steps. This
/// may not be needed anymore after this feature request will be resolved by GitHub:
/// https://github.community/t/support-for-yaml-anchors/16128
const fss = require('fs')
const path = require('path')
const paths = require('./paths')
const yaml = require('js-yaml')
// =================
// === Constants ===
// =================
const NODE_VERSION = '14.15.0'
const RUST_VERSION = 'nightly-2019-11-04'
const WASM_PACK_VERSION = '0.9.1'
// =============
// === Utils ===
// =============
function job(platforms,name,steps,cfg) {
if (!cfg) { cfg = {} }
return {
name: name,
"runs-on": "${{ matrix.os }}",
strategy: {
matrix: {
os: platforms
},
"fail-fast": false
},
steps : list({uses:"actions/checkout@v2"}, ...steps),
...cfg
}
}
function job_on_all_platforms(...args) {
return job(["windows-latest", "macOS-latest", "ubuntu-latest"],...args)
}
function job_on_macos(...args) {
return job(["macOS-latest"],...args)
}
function job_on_linux(...args) {
return job(["ubuntu-latest"],...args)
}
function list(...args) {
let out = []
for (let arg of args) {
if (Array.isArray(arg)) {
out.push(...arg)
} else {
out.push(arg)
}
}
return out
}
// ====================
// === Dependencies ===
// ====================
let installRust = {
name: "Install Rust",
uses: "actions-rs/toolchain@v1",
with: {
toolchain: RUST_VERSION,
override: true
}
}
let installNode = {
name: "Install Node",
uses: "actions/setup-node@v1",
with: {
"node-version": NODE_VERSION,
}
}
let installPrettier = {
name: "Install Prettier",
run: "npm install --save-dev --save-exact prettier"
}
let installClippy = {
name: "Install Clippy",
run: "rustup component add clippy"
}
function installWasmPackOn(name,sys,pkg) {
return {
name: `Install wasm-pack (${name})`,
env: {
WASMPACKURL: `https://github.com/rustwasm/wasm-pack/releases/download/v${WASM_PACK_VERSION}`,
WASMPACKDIR: `wasm-pack-v${WASM_PACK_VERSION}-x86_64-${pkg}`,
},
run: `
curl -L "$WASMPACKURL/$WASMPACKDIR.tar.gz" | tar -xz -C .
mv $WASMPACKDIR/wasm-pack ~/.cargo/bin
rm -r $WASMPACKDIR`,
shell: "bash",
if: `matrix.os == '${sys}-latest'`,
}
}
let installWasmPackOnMacOS = installWasmPackOn('macOS','macOS','apple-darwin')
let installWasmPackOnWindows = installWasmPackOn('Windows','windows','pc-windows-msvc')
let installWasmPackOnLinux = installWasmPackOn('Linux','ubuntu','unknown-linux-musl')
// We could use cargo install wasm-pack, but that takes 3.5 minutes compared to few seconds.
let installWasmPack = [installWasmPackOnMacOS, installWasmPackOnWindows, installWasmPackOnLinux]
// =============================
// === Build, Lint, and Test ===
// =============================
function buildOn(name,sys) {
return {
name: `Build (${name})`,
run: `node ./run dist --skip-version-validation --target ${name}`,
if: `matrix.os == '${sys}-latest'`
}
}
buildOnMacOS = buildOn('macos','macos')
buildOnWindows = buildOn('win','windows')
buildOnLinux = buildOn('linux','ubuntu')
let lintJavaScript = {
name: "Lint JavaScript sources",
run: "npx prettier --check 'src/**/*.js'",
}
let lintRust = {
name: "Lint Rust sources",
run: "node ./run lint --skip-version-validation",
}
let testNoWASM = {
name: "Run tests (no WASM)",
run: "node ./run test --no-wasm --skip-version-validation",
}
let testWASM = {
name: "Run tests (WASM)",
run: "node ./run test --no-native --skip-version-validation",
}
// =================
// === Artifacts ===
// =================
let uploadContentArtifacts = {
name: `Upload Content Artifacts`,
uses: "actions/upload-artifact@v1",
with: {
name: 'content',
path: `dist/content`
},
if: `matrix.os == 'macOS-latest'`
}
function uploadBinArtifactsFor(name,sys,ext,os) {
return {
name: `Upload Artifacts (${name}, ${ext})`,
uses: "actions/upload-artifact@v1",
with: {
name: `enso-${os}-\${{fromJson(steps.changelog.outputs.content).version}}.${ext}`,
path: `dist/client/enso-${os}-\${{fromJson(steps.changelog.outputs.content).version}}.${ext}`
},
if: `matrix.os == '${sys}-latest'`
}
}
uploadBinArtifactsForMacOS = uploadBinArtifactsFor('Linux','ubuntu','AppImage','linux')
uploadBinArtifactsForWindows = uploadBinArtifactsFor('Windows','windows','exe','win')
uploadBinArtifactsForLinux = uploadBinArtifactsFor('macOS','macos','dmg','mac')
let downloadArtifacts = {
name: "Download artifacts",
uses: "actions/download-artifact@v2",
with: {
path: "artifacts"
}
}
// ======================
// === GitHub Release ===
// ======================
let getCurrentReleaseChangelogInfo = {
name: 'Read changelog info',
id: 'changelog',
run: `
node ./run ci-gen --skip-version-validation
content=\`cat CURRENT_RELEASE_CHANGELOG.json\`
echo "::set-output name=content::$content"
`,
shell: 'bash'
}
let uploadGitHubRelease = {
name: `Upload GitHub Release`,
uses: "softprops/action-gh-release@v1",
env: {
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
},
with: {
files: "artifacts/**/enso-*",
name: "Enso ${{fromJson(steps.changelog.outputs.content).version}}",
tag_name: "v${{fromJson(steps.changelog.outputs.content).version}}",
body: "${{fromJson(steps.changelog.outputs.content).body}}",
prerelease: "${{fromJson(steps.changelog.outputs.content).prerelease}}",
},
}
// ===================
// === CDN Release ===
// ===================
prepareAwsSessionCDN = {
shell: "bash",
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-1
text
EOF
`
}
function uploadToCDN(...names) {
let actions = []
for (let name of names) {
let action = {
name: `Upload '${name}' to CDN`,
shell: "bash",
run: `aws s3 cp ./artifacts/content/assets/${name} `
+ `s3://ensocdn/ide/\${{fromJson(steps.changelog.outputs.content).version}}/${name} --profile `
+ `s3-upload --acl public-read --content-encoding gzip`
}
actions.push(action)
}
return actions
}
// ==================
// === Assertions ===
// ==================
let assertVersionUnstable = {
name: "Assert Version Unstable",
run: "node ./run assert-version-unstable --skip-version-validation",
if: `github.ref == 'refs/heads/unstable'`
}
let assertVersionStable = {
name: "Assert Version Stable",
run: "node ./run assert-version-stable --skip-version-validation",
if: `github.ref == 'refs/heads/stable'`
}
let assertReleaseDoNotExists = [
{
id: 'checkCurrentReleaseTag',
uses: 'mukunku/tag-exists-action@v1.0.0',
env: {
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
},
with: {
tag: 'v${{fromJson(steps.changelog.outputs.content).version}}'
}
},
{
name: 'Fail if release already exists',
run: 'if [[ ${{ steps.checkCurrentReleaseTag.outputs.exists }} == true ]]; then exit 1; fi',
}
]
let assertions = list(
assertVersionUnstable,
assertVersionStable,
assertReleaseDoNotExists
)
// ================
// === Workflow ===
// ================
let releaseCondition = `github.ref == 'refs/heads/unstable' || github.ref == 'refs/heads/stable'`
let buildCondition = `contains(github.event.head_commit.message,'[ci build]') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' || ${releaseCondition}`
let workflow = {
name : "GUI CI",
on: ['push'],
jobs: {
version_assertions: job_on_macos("Version Assertions", [
getCurrentReleaseChangelogInfo,
assertions
]),
lint: job_on_macos("Linter", [
installNode,
installRust,
installPrettier,
installClippy,
lintJavaScript,
lintRust
]),
test: job_on_macos("Tests", [
installNode,
installRust,
testNoWASM,
]),
"wasm-test": job_on_macos("WASM Tests", [
installNode,
installRust,
installWasmPack,
testWASM
]),
simple_build: job_on_macos("Simple Build (WASM size limit check)", [
installNode,
installRust,
installWasmPack,
buildOnMacOS,
],{if:`!(${buildCondition})`}),
build: job_on_all_platforms("Build", [
getCurrentReleaseChangelogInfo,
installNode,
installRust,
installWasmPack,
buildOnMacOS,
buildOnWindows,
buildOnLinux,
uploadContentArtifacts,
uploadBinArtifactsForMacOS,
uploadBinArtifactsForWindows,
uploadBinArtifactsForLinux,
],{if:buildCondition}),
release_to_github: job_on_macos("GitHub Release", [
downloadArtifacts,
getCurrentReleaseChangelogInfo,
// This assertion is checked earlier, but we should double-check it in case several
// CI jobs wil be run on this branch and a release was created when this workflow was
// running.
assertReleaseDoNotExists,
uploadGitHubRelease,
],{ if:releaseCondition,
needs:['version_assertions','lint','test','wasm-test','build']
}),
release_to_cdn: job_on_linux("CDN Release", [
downloadArtifacts,
getCurrentReleaseChangelogInfo,
prepareAwsSessionCDN,
uploadToCDN('index.js.gz','style.css','ide.wasm','wasm_imports.js.gz'),
],{ if:releaseCondition,
needs:['version_assertions','lint','test','wasm-test','build']
}),
}
}
let header = `
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# DO NOT CHANGE THIS FILE. IT WAS GENERATED FROM 'build/workflow.js'. READ DOCS THERE TO LEARN MORE.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
`
/// Generates a new GitHub workflow file (in .github/workflow/...).
function generate() {
let workflow_script = header + '\n' + yaml.dump(workflow,{noRefs:true})
fss.writeFileSync(path.join(paths.github.workflows,'gui-ci.yml'),workflow_script)
}
// ===============
// === Exports ===
// ===============
module.exports = {generate}

View File

@ -0,0 +1,162 @@
# Next Release
This update contains major performance improvements and exposes new privacy user settings. We will
work towards stabilizing it in the next weeks in order to make these updates be shipped in a stable
release before the end of the year.
<br/>![New Features](/docs/assets/tags/new_features.svg)
#### Visual Environment
- [You can now launch missiles directly from the GUI][79270]. It was technically possible since
version 3.0.0-alpha.7, but it was never exposed as a button.
- [The graph editor stops shaking and running away when you are pasting JavaScript code][79271].
#### Runtime
- [The JiT compiler got new optimizations and produces code up to 10x faster than C++][79272].
- [You do not need to keep your computer in -20°C to prevent the engine from crashing anymore][79273].
#### Libraries
- [The new JSON library allows you to parse 2Gb files in 50ms][79274].
- [The Regexp library exposes now methods to test the expressions directly on humans][79275].
<br/>![Bug Fixes](/docs/assets/tags/bug_fixes.svg)
#### Visual Environment
- [You can now launch missiles directly from the GUI][79270]. It was technically possible since
version 3.0.0-alpha.7, but it was never exposed as a button.
- [The graph editor stops shaking and running away when you are pasting JavaScript code][79271].
#### Runtime
- [The JiT compiler got new optimizations and produces code up to 10x faster than C++][79272].
- [You do not need to keep your computer in -20°C to prevent the engine from crashing anymore][79273].
#### Libraries
- [The new JSON library allows you to parse 2Gb files in 50ms][79274].
- [The Regexp library exposes now methods to test the expressions directly on humans][79275].
<br/>![New Learning Resources](/docs/assets/tags/new_learning_resources.svg)
#### Visual Environment
- [You can now launch missiles directly from the GUI][79270]. It was technically possible since
version 3.0.0-alpha.7, but it was never exposed as a button.
- [The graph editor stops shaking and running away when you are pasting JavaScript code][79271].
#### Runtime
- [The JiT compiler got new optimizations and produces code up to 10x faster than C++][79272].
- [You do not need to keep your computer in -20°C to prevent the engine from crashing anymore][79273].
#### Libraries
- [The new JSON library allows you to parse 2Gb files in 50ms][79274].
- [The Regexp library exposes now methods to test the expressions directly on humans][79275].
<br/>![Release Notes](/docs/assets/tags/release_notes.svg)
#### Visual Environment
- [You can now launch missiles directly from the GUI][79270]. It was technically possible since
version 3.0.0-alpha.7, but it was never exposed as a button.
- [The graph editor stops shaking and running away when you are pasting JavaScript code][79271].
#### Runtime
- [The JiT compiler got new optimizations and produces code up to 10x faster than C++][79272].
- [You do not need to keep your computer in -20°C to prevent the engine from crashing anymore][79273].
#### Libraries
- [The new JSON library allows you to parse 2Gb files in 50ms][79274].
- [The Regexp library exposes now methods to test the expressions directly on humans][79275].
[79270]: http://github.com/ticket
[79271]: http://github.com/ticket
[79272]: http://github.com/ticket
[79273]: http://github.com/ticket
[79274]: http://github.com/ticket
[79275]: http://github.com/ticket
<br/>
# Enso 47.0.0-alpha.8 (2049-01-22)
This update contains major performance improvements and exposes new privacy user settings. We will
work towards stabilizing it in the next weeks in order to make these updates be shipped in a stable
release before the end of the year.
<br/>![New Features](/docs/assets/tags/new_features.svg)
#### Visual Environment
- [You can now launch missiles directly from the GUI][79270]. It was technically possible since
version 3.0.0-alpha.7, but it was never exposed as a button.
- [The graph editor stops shaking and running away when you are pasting JavaScript code][79271].
#### Runtime
- [The JiT compiler got new optimizations and produces code up to 10x faster than C++][79272].
- [You do not need to keep your computer in -20°C to prevent the engine from crashing anymore][79273].
#### Libraries
- [The new JSON library allows you to parse 2Gb files in 50ms][79274].
- [The Regexp library exposes now methods to test the expressions directly on humans][79275].
<br/>![Bug Fixes](/docs/assets/tags/bug_fixes.svg)
#### Visual Environment
- [You can now launch missiles directly from the GUI][79270]. It was technically possible since
version 3.0.0-alpha.7, but it was never exposed as a button.
- [The graph editor stops shaking and running away when you are pasting JavaScript code][79271].
#### Runtime
- [The JiT compiler got new optimizations and produces code up to 10x faster than C++][79272].
- [You do not need to keep your computer in -20°C to prevent the engine from crashing anymore][79273].
#### Libraries
- [The new JSON library allows you to parse 2Gb files in 50ms][79274].
- [The Regexp library exposes now methods to test the expressions directly on humans][79275].
<br/>![New Learning Resources](/docs/assets/tags/new_learning_resources.svg)
#### Visual Environment
- [You can now launch missiles directly from the GUI][79270]. It was technically possible since
version 3.0.0-alpha.7, but it was never exposed as a button.
- [The graph editor stops shaking and running away when you are pasting JavaScript code][79271].
#### Runtime
- [The JiT compiler got new optimizations and produces code up to 10x faster than C++][79272].
- [You do not need to keep your computer in -20°C to prevent the engine from crashing anymore][79273].
#### Libraries
- [The new JSON library allows you to parse 2Gb files in 50ms][79274].
- [The Regexp library exposes now methods to test the expressions directly on humans][79275].
<br/>![Release Notes](/docs/assets/tags/release_notes.svg)
#### Visual Environment
- [You can now launch missiles directly from the GUI][79270]. It was technically possible since
version 3.0.0-alpha.7, but it was never exposed as a button.
- [The graph editor stops shaking and running away when you are pasting JavaScript code][79271].
#### Runtime
- [The JiT compiler got new optimizations and produces code up to 10x faster than C++][79272].
- [You do not need to keep your computer in -20°C to prevent the engine from crashing anymore][79273].
#### Libraries
- [The new JSON library allows you to parse 2Gb files in 50ms][79274].
- [The Regexp library exposes now methods to test the expressions directly on humans][79275].
[79270]: http://github.com/ticket
[79271]: http://github.com/ticket
[79272]: http://github.com/ticket
[79273]: http://github.com/ticket
[79274]: http://github.com/ticket
[79275]: http://github.com/ticket
<br/>
# Enso 47.0.0-alpha.7 (2049-01-07)
...

View File

@ -227,3 +227,53 @@ have prepared several scripts which maximally automate the process:
- **Linting** - **Linting**
Please be sure to fix all errors reported by `node ./run lint` before Please be sure to fix all errors reported by `node ./run lint` before
creating a pull request to this repository. creating a pull request to this repository.
### Development Branches
The following branches are used to develop the product:
- **wip/[initials]/[feature]**
Feature branches. These are temporary branches used by the team to develop a particular feature.
- **develop**
Contains the most recent changes to the product. After successful review, the feature branches are
merged here. Each commit to this branch will result in a nightly build of the product accessible
as CI artifacts.
- **unstable**
Contains only those commits which can be considered unstable product releases. Each commit to this
branch will result in an unstable release of the product and will be published on GitHub as a
pre-release. The build version and build description will be automatically fetched from the newest
`CHANGELOG.md` entry and will fail if the version will not be of the form
`[major].[minor].[patch]-[sfx]`, where `[sfx]` is one of `alpha.[n]`, `beta.[n]`, or `rc.[n]`,
where `[n]` is an unstable build number.
- **stable**
Contains only those commits which can be considered stable product releases. Each commit to this
branch will result in a stable release of the product and will be published on GitHub as a
release. The build version and build description will be automatically fetched from the newest
`CHANGELOG.md` entry and will fail if the version will not be of the form
`[major].[minor].[patch]`.
### Forcing CI builds
By default, CI would not build artifacts from `wip` and `develop` branches in order to save time and
resources. If you want the artifacts to be build for your commit, simply add `[ci build]` anywhere
in your commit message.
### Publishing Results
All new changes should be proposed in the form of Pull Requests (PRs) to this repository. Each PR
should contain changes to documentation and `CHANGELOG.md` if applicable.
## Changelog
Please remember to update the `CHANGELOG.md` on every new bug fix or feature implementation. Please
note that `CHANGELOG.md` is used to establish the current product version (the `run` script extracts
it from the newest changelog entry). Thus, be sure to always increase the newest version in the
changelog after a release, otherwise CI will fail. Please use the `docs/CHANGELOG_TEMPLATE.md` as
the template to create new changelog entries. Please note, that there is a special syntax for
defining features of the upcoming release. The newest changelog entry can have a title
"Next Release". In such a case, the build version will be `0.0.0` and CI would fail when trying to
publish it as a release.

View File

@ -0,0 +1,7 @@
<svg version="1.1" width="91" height="36" xmlns="http://www.w3.org/2000/svg">
<style>
.txt { font: 15px sans-serif; fill:white; }
</style>
<rect width="91" height="36" rx="18" fill="#e02424"/>
<text x="12" y="23" class="txt">Bug Fixes</text>
</svg>

After

Width:  |  Height:  |  Size: 273 B

View File

@ -0,0 +1,7 @@
<svg version="1.1" width="117" height="36" xmlns="http://www.w3.org/2000/svg">
<style>
.txt { font: 15px sans-serif; fill:white; }
</style>
<rect width="117" height="36" rx="18" fill="#1c64f2"/>
<text x="12" y="23" class="txt">New Features</text>
</svg>

After

Width:  |  Height:  |  Size: 278 B

View File

@ -0,0 +1,7 @@
<svg version="1.1" width="192" height="36" xmlns="http://www.w3.org/2000/svg">
<style>
.txt { font: 15px sans-serif; fill:white; }
</style>
<rect width="192" height="36" rx="18" fill="#047481"/>
<text x="12" y="23" class="txt">New Learning Resources</text>
</svg>

After

Width:  |  Height:  |  Size: 288 B

View File

@ -0,0 +1,7 @@
<svg version="1.1" width="123" height="36" xmlns="http://www.w3.org/2000/svg">
<style>
.txt { font: 15px sans-serif; fill:white; }
</style>
<rect width="123" height="36" rx="18" fill="#5850ec"/>
<text x="12" y="23" class="txt">Release Notes</text>
</svg>

After

Width:  |  Height:  |  Size: 279 B

View File

@ -25,13 +25,15 @@ async function init () {
}) })
} }
let initialized = fss.existsSync(paths.dist.init) let initialized = fss.existsSync(paths.dist.buildInit)
if (!initialized) { if (!initialized) {
cmd.section('Initialization') cmd.section('Initialization')
console.log('Installing build script dependencies.') console.log('Installing build script dependencies.')
await cmd.with_cwd('build', async () => { await cmd.with_cwd('build', async () => {
await cmd.run('npm',['install']) await cmd.run('npm',['install'])
}) })
await fs.mkdir(paths.dist.root, {recursive:true})
await fs.open(paths.dist.buildInit,'w')
} }
} }

View File

@ -19,9 +19,9 @@ let config = {
dependencies: { dependencies: {
"create-servers": "^3.1.0", "create-servers": "^3.1.0",
"electron-is-dev": "^1.1.0", "electron-is-dev": "^1.1.0",
"enso-studio-common": "2.0.0-alpha.0", "enso-studio-common": "1.0.0",
"enso-studio-content": "2.0.0-alpha.0", "enso-studio-content": "1.0.0",
"enso-studio-icons": "2.0.0-alpha.0", "enso-studio-icons": "1.0.0",
"yargs": "^15.3.0" "yargs": "^15.3.0"
}, },
@ -43,7 +43,8 @@ let config = {
config.build = { config.build = {
appId: 'org.enso', appId: 'org.enso',
productName: 'Enso', productName: 'Enso',
copyright: 'Copyright © 2020 ${author}.', copyright: 'Copyright © 2021 ${author}.',
artifactName: 'enso-${os}-${version}.${ext}',
mac: { mac: {
icon: `${paths.dist.root}/icons/icon.icns`, icon: `${paths.dist.root}/icons/icon.icns`,
category: 'public.app-category.developer-tools', category: 'public.app-category.developer-tools',

View File

@ -1,4 +1,5 @@
let config = { let config = {
version: "1.0.0",
name: "enso-studio-common", name: "enso-studio-common",
} }

View File

@ -1,11 +1,12 @@
let config = { let config = {
name: "enso-studio-content", name: "enso-studio-content",
version: "1.0.0",
scripts: { scripts: {
"build": "npx webpack", "build": "npx webpack",
"watch": "npx webpack-dev-server" "watch": "npx webpack-dev-server"
}, },
dependencies: { dependencies: {
"enso-studio-common": "2.0.0-alpha.0", "enso-studio-common": "1.0.0",
"copy-webpack-plugin": "^5.1.1", "copy-webpack-plugin": "^5.1.1",
"mixpanel-browser": "2.40.1" "mixpanel-browser": "2.40.1"
}, },

View File

@ -1,5 +1,6 @@
let config = { let config = {
name: "enso-studio-icons", name: "enso-studio-icons",
version: "1.0.0",
scripts: { scripts: {
"build": "node src/index.js" "build": "node src/index.js"
}, },

View File

@ -174,7 +174,8 @@ async function genIcons() {
} }
toIco(files).then(buf => { fss.writeFileSync(`${distPath}/icon.ico`, buf) }) toIco(files).then(buf => { fss.writeFileSync(`${distPath}/icon.ico`, buf) })
await fs.open(donePath,'w') let handle = await fs.open(donePath,'w')
await handle.close()
} }
genIcons() genIcons()

View File

@ -1,5 +1,6 @@
let config = { let config = {
name: 'enso-studio-project-manager', name: 'enso-studio-project-manager',
version: "1.0.0",
scripts: { scripts: {
build: 'npx ts-node src/build.ts', build: 'npx ts-node src/build.ts',
}, },

View File

@ -1,6 +1,6 @@
{ {
"name": "root", "name": "root",
"version": "2.0.0-alpha.0", "version": "1.0.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -1223,9 +1223,9 @@
} }
}, },
"@octokit/openapi-types": { "@octokit/openapi-types": {
"version": "3.2.1", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-3.2.1.tgz", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-3.3.0.tgz",
"integrity": "sha512-OOXW6e+vSIpA63Zp5Q+hio3tnQsWFnn9xx1xco0arjTOBcKW/NwFsmhpmj4Yt5IddUS1V7PVGSfRRDO5qZhEqQ==", "integrity": "sha512-s3dd32gagPmKaSLNJ9aPNok7U+tl69YLESf6DgQz5Ml/iipPZtif3GLvWpNXoA6qspFm1LFUZX+C3SqWX/Y/TQ==",
"dev": true "dev": true
}, },
"@octokit/plugin-enterprise-rest": { "@octokit/plugin-enterprise-rest": {
@ -1369,12 +1369,12 @@
} }
}, },
"@octokit/types": { "@octokit/types": {
"version": "6.5.3", "version": "6.6.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.5.3.tgz", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.6.0.tgz",
"integrity": "sha512-kKefDpNiYXQoZvvbDxgdTDKn1pzopxyn9W/7nkIxNaiRC20jKDEC8vVT8GN6R8eTz8pImz2198jCXTgEMck+sA==", "integrity": "sha512-nmFoU3HCbw1AmnZU/eto2VvzV06+N7oAqXwMmAHGlNDF+KFykksh/VlAl85xc1P5T7Mw8fKYvXNaImNHCCH/rg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@octokit/openapi-types": "^3.2.1", "@octokit/openapi-types": "^3.3.0",
"@types/node": ">= 8" "@types/node": ">= 8"
} }
}, },
@ -1443,9 +1443,9 @@
"dev": true "dev": true
}, },
"@types/yargs": { "@types/yargs": {
"version": "15.0.12", "version": "15.0.13",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.12.tgz", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz",
"integrity": "sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw==", "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==",
"requires": { "requires": {
"@types/yargs-parser": "*" "@types/yargs-parser": "*"
} }
@ -1877,9 +1877,9 @@
} }
}, },
"hosted-git-info": { "hosted-git-info": {
"version": "3.0.7", "version": "3.0.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz",
"integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==",
"requires": { "requires": {
"lru-cache": "^6.0.0" "lru-cache": "^6.0.0"
} }
@ -6248,9 +6248,9 @@
} }
}, },
"git-url-parse": { "git-url-parse": {
"version": "11.4.3", "version": "11.4.4",
"resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.3.tgz", "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.4.tgz",
"integrity": "sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ==", "integrity": "sha512-Y4o9o7vQngQDIU9IjyCmRJBin5iYjI5u9ZITnddRZpD7dcCFQj2sL2XuMNbLRE4b4B/4ENPsp2Q8P44fjAZ0Pw==",
"dev": true, "dev": true,
"requires": { "requires": {
"git-up": "^4.0.0" "git-up": "^4.0.0"
@ -7878,9 +7878,9 @@
} }
}, },
"hosted-git-info": { "hosted-git-info": {
"version": "3.0.7", "version": "3.0.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz",
"integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==",
"dev": true, "dev": true,
"requires": { "requires": {
"lru-cache": "^6.0.0" "lru-cache": "^6.0.0"
@ -8026,12 +8026,6 @@
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true "dev": true
},
"yargs-parser": {
"version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
"dev": true
} }
} }
}, },

View File

@ -1,6 +1,6 @@
let config = { let config = {
name: 'root', name: 'root',
version: '2.0.0-alpha.0', version: '1.0.0',
private: true, private: true,
devDependencies: { devDependencies: {
lerna: '^3.20.2', lerna: '^3.20.2',

View File

@ -782,7 +782,7 @@ impl Var {
// === Sheet === // === Sheet ===
// ============= // =============
/// Cascading style sheet. Implemented as a tree of `SheedNode`s. Each style sheet node can be /// Cascading style sheet. Implemented as a tree of `SheetNode`s. Each style sheet node can be
/// assigned with a value of type `Data` or an expression to compute one. It also allows creating /// assigned with a value of type `Data` or an expression to compute one. It also allows creating
/// variables which are automatically bound to the most specific style sheet. See `Var`, `Query` , /// variables which are automatically bound to the most specific style sheet. See `Var`, `Query` ,
/// and `Sheet` to learn more. /// and `Sheet` to learn more.