Skip to content

chore: refactor to turbo #8817

chore: refactor to turbo

chore: refactor to turbo #8817

Workflow file for this run

name: Build
on:
pull_request:
types:
- opened
- synchronize
paths-ignore:
- "docs/**"
- "logo/**"
push:
branches:
- main
- dev
workflow_dispatch: {}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.head.ref || github.ref }}
cancel-in-progress: true
env:
RUST_VERSION: "1.67.1"
NODE_VERSION: "18.16.0"
PNPM_VERSION: "8.6.3"
jobs:
build:
name: "Build"
timeout-minutes: 30
runs-on: ubuntu-latest
env:
CARGO_TERM_COLOR: always
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
outputs:
version: ${{ fromJson(steps.changelog.outputs.data).newVersion }}
last-version: ${{ fromJson(steps.changelog.outputs.data).lastVersion }}
changelog: ${{ fromJson(steps.changelog.outputs.data).changelog }}
vscode-wing-changed: ${{ steps.git-diff-vscode-wing.outputs.diff }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup pnpm
uses: pnpm/[email protected]
with:
version: ${{ env.PNPM_VERSION }}
- name: Setup Node
uses: actions/setup-node@v3
with:
cache: "pnpm"
node-version: ${{ env.NODE_VERSION }}
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_VERSION }}
targets: |
x86_64-unknown-linux-gnu
wasm32-wasi
components: rustfmt,clippy,rust-std
- name: Setup Cargo Cache
uses: Swatinem/rust-cache@v2
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Changelog Generation
id: changelog
env:
GENERATE_VERSION: ${{ github.event_name != 'push' || github.repository != 'winglang/wing' }}
run: pnpm changelog
- name: Build and Package
run: pnpm package --filter=!hangar
env:
SEGMENT_WRITE_KEY: ${{ secrets.SEGMENT_WRITE_KEY }}
- name: Upload Dist Artifacts
uses: actions/upload-artifact@v3
with:
name: dist
path: dist/*.tgz
- name: Check git diff of VSCode Extension
id: git-diff-vscode-wing
run: |
if git diff --quiet origin/${{ github.base_ref }} ${{ github.sha }} -- apps/vscode-wing; then
echo "diff=false" >> "$GITHUB_OUTPUT"
else
echo "diff=true" >> "$GITHUB_OUTPUT"
fi
- name: Upload Extension
uses: actions/upload-artifact@v3
with:
name: vscode-wing
path: apps/vscode-wing/vscode-wing.vsix
- name: Compress Docs
run: tar -czvf docs.tgz docs/*
- name: Upload Docs
uses: actions/upload-artifact@v3
with:
name: docs
path: docs.tgz
test:
name: Test
timeout-minutes: 30
runs-on: ubuntu-latest
needs:
- build
env:
CARGO_TERM_COLOR: always
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup pnpm
uses: pnpm/[email protected]
with:
version: ${{ env.PNPM_VERSION }}
- name: Setup Node
uses: actions/setup-node@v3
with:
cache: "pnpm"
node-version: ${{ env.NODE_VERSION }}
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_VERSION }}
targets: |
x86_64-unknown-linux-gnu
wasm32-wasi
components: rustfmt,clippy,rust-std
- name: Setup Cargo Cache
uses: Swatinem/rust-cache@v2
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Install Playwright
working-directory: apps/wing-console/console/app
run: pnpm exec playwright install --with-deps
- name: Test
run: pnpm test
benchmark:
name: Benchmark
runs-on: ubuntu-latest
needs:
- build
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download Dist Artifacts
uses: actions/download-artifact@v3
with:
name: dist
path: dist
- name: Setup pnpm
uses: pnpm/[email protected]
with:
version: ${{ env.PNPM_VERSION }}
- name: Setup Node
uses: actions/setup-node@v3
with:
cache: "pnpm"
node-version: ${{ env.NODE_VERSION }}
- name: Install Dependencies
run: pnpm install --frozen-lockfile --filter hangar --filter examples-valid --filter examples-invalid
- name: Run E2E Benchmarks
run: pnpm bench
working-directory: tools/hangar
- name: Upload Report JSON
uses: actions/upload-artifact@v3
with:
name: benchmarks
path: tools/hangar/results/report.json
- name: Create Markdown report
run: node scripts/benchmark_json_to_table.mjs
e2e-test:
name: "E2E / ${{ matrix.runner }} + Node${{ matrix.node }} [${{ matrix.shard }}]"
runs-on: "${{ matrix.runner }}-latest"
needs:
- build
strategy:
fail-fast: true
matrix:
runner: [windows, macos, ubuntu]
node: ["18", "20"]
shard: ["1/2", "2/2"]
# shard: ["1/4", "2/4", "3/4", "4/4"]
# shard: ["1/3", "2/3", "3/3"]
# shard: ["1/8", "2/8", "3/8", "4/8", "5/8", "6/8", "7/8", "8/8"]
full_run:
# Do a full run on push or when the PR is labeled "pr/e2e-full"
- ${{ github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, '🧪 pr/e2e-full') }}
exclude:
- runner: macos
full_run: false
- runner: windows
full_run: false
- runner: ubuntu
node: "20"
full_run: false
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Setup pnpm
uses: pnpm/[email protected]
with:
version: ${{ env.PNPM_VERSION }}
- name: Setup Node
uses: actions/setup-node@v3
with:
cache: "pnpm"
node-version: ${{ matrix.node }}
- name: Download Dist Artifacts
uses: actions/download-artifact@v3
with:
name: dist
path: dist
- name: Install dependencies
run: pnpm install --frozen-lockfile --ignore-scripts --filter hangar --filter examples-valid --filter examples-invalid
- name: Run Hangar Tests
working-directory: tools/hangar
run: |
pnpm test:generate
pnpm run test --shard=${{ matrix.shard }} --update=${{ matrix.runner == 'ubuntu' && matrix.node == '18' }}
- name: Create mutation if needed
# we only care about the diff in our standard dev env
if: matrix.runner == 'ubuntu' && matrix.node == '18'
id: diff
env:
RAW_SHARD: ${{ matrix.shard }}
run: |
SHARD=$(echo $RAW_SHARD | sed 's/\//of/g')
DIFF_NAME="e2e-$SHARD.diff"
git add --all
git diff --staged --binary --patch > $DIFF_NAME
if [ -s $DIFF_NAME ]; then
echo "diff=true" >> $GITHUB_OUTPUT
echo "diff_name=$DIFF_NAME" >> $GITHUB_OUTPUT
fi
- name: Upload mutation
if: matrix.runner == 'ubuntu' && matrix.node == '18' && steps.diff.outputs.diff == 'true'
uses: actions/upload-artifact@v3
with:
name: ${{ steps.diff.outputs.diff_name }}
path: ${{ steps.diff.outputs.diff_name }}
quality-gate:
name: Quality Gate
runs-on: ubuntu-latest
needs:
- build
- e2e-test
- benchmark
- test
steps:
- name: Download patches
uses: actions/download-artifact@v3
- name: Check patches
run: |
PATCH_COUNT=0
for f in $(find ./*.diff/*.diff); do
PATCH_COUNT=$((PATCH_COUNT + 1))
cat $f
done
if [ $PATCH_COUNT -gt 0 ]; then
echo "Found $PATCH_COUNT patches, build failed. A self-mutation should happen soon."
exit 1
fi
- name: All good
run: echo "Builds and tests passed! 🎉🎉🎉"
# publish:
# name: Publish
# if: ${{ github.event_name == 'push' && github.repository == 'winglang/wing' && github.ref == 'refs/heads/main' }}
# needs:
# - quality-gate
# - build
# runs-on: ubuntu-latest
# steps:
# - name: Download Build Artifacts
# uses: actions/download-artifact@v3
# - name: Tag commit
# uses: tvdias/[email protected]
# if: ${{ needs.build.outputs.last-version != needs.build.outputs.version }}
# with:
# repo-token: "${{ secrets.PROJEN_GITHUB_TOKEN }}"
# tag: "v${{ needs.build.outputs.version }}"
# - name: Publish Extension to Visual Studio Marketplace
# if: needs.build.outputs.vscode-wing-changed == 'true'
# uses: "HaaLeo/publish-vscode-extension@v1"
# with:
# pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}
# registryUrl: "https://marketplace.visualstudio.com"
# extensionFile: "vscode-wing/vscode-wing.vsix"
# dependencies: false
# - name: Login to NPM registry
# run: npm set //registry.npmjs.org/:_authToken ${{ secrets.NPM_PUBLISH_TOKEN }}
# - name: Check published WingSDK version
# id: wingsdk-version
# run: echo "version=$(npm view @winglang/sdk version)" >> $GITHUB_OUTPUT
# - name: Publish Wing SDK
# if: ${{ steps.wingsdk-version.outputs.version != needs.build.outputs.version }}
# working-directory: wingsdk
# run: npm publish *.tgz --access public
# - name: Check published Wing Compiler version
# id: wingcompiler-version
# run: echo "version=$(npm view @winglang/compiler version)" >> $GITHUB_OUTPUT
# - name: Publish Wing Compiler
# if: ${{ steps.wingcompiler-version.outputs.version != needs.build.outputs.version }}
# working-directory: wingcompiler
# run: npm publish *.tgz --access public
# - name: Check published Wing Console Design System version
# id: wingconsoledesignsystem-version
# run: echo "version=$(npm view @wingconsole/design-system version)" >> $GITHUB_OUTPUT
# - name: Publish Wing Console Design System
# if: ${{ steps.wingconsoledesignsystem-version.outputs.version != needs.build.outputs.version }}
# working-directory: wingconsoledesignsystem
# run: npm publish *.tgz --access public
# - name: Check published Wing Console UI version
# id: wingconsoleui-version
# run: echo "version=$(npm view @wingconsole/ui version)" >> $GITHUB_OUTPUT
# - name: Publish Wing Console UI
# if: ${{ steps.wingconsoleui-version.outputs.version != needs.build.outputs.version }}
# working-directory: wingconsoleui
# run: npm publish *.tgz --access public
# - name: Check published Wing Console Server version
# id: wingconsoleserver-version
# run: echo "version=$(npm view @wingconsole/server version)" >> $GITHUB_OUTPUT
# - name: Publish Wing Console Server
# if: ${{ steps.wingconsoleserver-version.outputs.version != needs.build.outputs.version }}
# working-directory: wingconsoleserver
# run: npm publish *.tgz --access public
# - name: Check published Wing Console App version
# id: wingconsoleapp-version
# run: echo "version=$(npm view @wingconsole/app version)" >> $GITHUB_OUTPUT
# - name: Publish Wing Console App
# if: ${{ steps.wingconsoleapp-version.outputs.version != needs.build.outputs.version }}
# working-directory: wingconsoleapp
# run: npm publish *.tgz --access public
# - name: Check published Wing version
# id: wing-version
# run: echo "version=$(npm view winglang version)" >> $GITHUB_OUTPUT
# - name: Publish Wing
# if: ${{ steps.wing-version.outputs.version != needs.build.outputs.version }}
# working-directory: wing
# run: npm publish *.tgz --access public
# - name: Rename Docs
# run: mv docs "docs-${{ needs.build.outputs.version }}.tgz"
# - name: Write Changelog
# uses: DamianReeves/[email protected]
# with:
# path: "CHANGELOG.md"
# contents: ${{ needs.build.outputs.changelog }}
# write-mode: overwrite
# - name: Compute Checksums
# run: |
# mkdir dist
# mv ./*/*.vsix ./dist
# mv ./*/*.tgz ./dist
# mv ./*/*.wasm ./dist
# mv ./benchmarks/* ./dist
# cd dist
# echo '' >> ../CHANGELOG.md
# echo '### SHA-1 Checksums' >> ../CHANGELOG.md
# echo '```' >> ../CHANGELOG.md
# sha1sum --binary * >> ../CHANGELOG.md
# echo '```' >> ../CHANGELOG.md
# cat ../CHANGELOG.md
# - name: Cut Development Release
# uses: softprops/action-gh-release@v1
# with:
# name: "Wing ${{ needs.build.outputs.version }}"
# tag_name: "v${{ needs.build.outputs.version }}"
# body_path: CHANGELOG.md
# files: dist/*
# token: ${{ secrets.PROJEN_GITHUB_TOKEN }}