Skip to content

chore: refactor to turbo #8818

chore: refactor to turbo

chore: refactor to turbo #8818

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 Artifacts
uses: actions/upload-artifact@v3
with:
name: dist
path: dist/*.tgz
- name: Upload WingC WASM
uses: actions/upload-artifact@v3
with:
name: wingc
path: libs/wingcompiler/wingc.wasm
- 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"]
# 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'
run: echo "Publishing VSCode Extension"
# - 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: Publish npm packages
# run: |
# for file in *.tgz; do
# npm publish "$file" --access public
# done
run: |
for file in *.tgz; do
echo "publish $file"
done
working-directory: dist
- 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: |
mv ./*/*.vsix ./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 }}