Skip to content

Concrete where Eq<T> constraints #6053

Concrete where Eq<T> constraints

Concrete where Eq<T> constraints #6053

Workflow file for this run

name: CI
on:
push:
branches: [master]
tags:
- v*
pull_request:
env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0
CARGO_PROFILE_TEST_DEBUG: 0
RUST_BACKTRACE: full
SOLC_VERSION: v0.8.30
FOUNDRY_VERSION: v1.5.1
jobs:
lint:
runs-on: ubuntu-latest
env:
RUSTFLAGS: "-D warnings"
steps:
- uses: actions/checkout@v5
- name: Install rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
components: rustfmt, clippy
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Generate tree-sitter parser
working-directory: crates/tree-sitter-fe
run: |
# Install only the pinned tree-sitter CLI (skip the root package's
# Node-addon build, which the Rust build doesn't use), then generate
# parser.c and friends from grammar.js.
npm ci --ignore-scripts
npm rebuild tree-sitter-cli
npx tree-sitter generate --abi=14
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Validate release notes entry
run: ./newsfragments/validate_files.py
- name: Lint with rustfmt
run: cargo fmt --all -- --check
- name: Lint with clippy
run: cargo clippy --locked --workspace --all-targets --all-features -- -D clippy::all
test:
# Build & Test runs on all platforms
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
- os: macOS-latest
- os: windows-latest
steps:
- uses: actions/checkout@v5
- name: Install rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Generate tree-sitter parser
working-directory: crates/tree-sitter-fe
shell: bash
run: |
# Install only the pinned tree-sitter CLI (skip the root package's
# Node-addon build, which the Rust build doesn't use), then generate
# parser.c and friends from grammar.js.
npm ci --ignore-scripts
npm rebuild tree-sitter-cli
npx tree-sitter generate --abi=14
- name: Cache solc
id: solc-cache
uses: actions/cache@v4
with:
path: ${{ runner.os == 'Windows' && format('{0}\\solc-{1}.exe', runner.temp, env.SOLC_VERSION) || format('{0}/solc-{1}', runner.temp, env.SOLC_VERSION) }}
key: solc-${{ runner.os }}-${{ env.SOLC_VERSION }}
- name: Download solc (Linux/macOS)
if: steps.solc-cache.outputs.cache-hit != 'true' && runner.os != 'Windows'
run: |
set -euo pipefail
if [ "${{ runner.os }}" = "Linux" ]; then
url="https://github.com/ethereum/solidity/releases/download/${SOLC_VERSION}/solc-static-linux"
else
url="https://github.com/ethereum/solidity/releases/download/${SOLC_VERSION}/solc-macos"
fi
curl -Ls "$url" -o "$RUNNER_TEMP/solc-${SOLC_VERSION}"
chmod +x "$RUNNER_TEMP/solc-${SOLC_VERSION}"
- name: Download solc (Windows)
if: steps.solc-cache.outputs.cache-hit != 'true' && runner.os == 'Windows'
shell: pwsh
run: |
$url = "https://github.com/ethereum/solidity/releases/download/$env:SOLC_VERSION/solc-windows.exe"
$output = "$env:RUNNER_TEMP\solc-$env:SOLC_VERSION.exe"
Invoke-WebRequest -Uri $url -OutFile $output
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: ${{ env.FOUNDRY_VERSION }}
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
with:
cache-workspace-crates: true
- name: Build
run: cargo test --release --workspace --all-features --no-run --locked --exclude fe-language-server --exclude fe-bench
- name: Run tests
env:
FE_SOLC_PATH: ${{ runner.os == 'Windows' && format('{0}\\solc-{1}.exe', runner.temp, env.SOLC_VERSION) || format('{0}/solc-{1}', runner.temp, env.SOLC_VERSION) }}
run: cargo nextest run --release --workspace --all-features --no-fail-fast --locked --exclude fe-language-server --exclude fe-bench
wasm-wasi-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Install rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Install WASM targets
run: |
rustup target add wasm32-unknown-unknown
rustup target add wasm32-wasip1
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Check core crates for wasm32-unknown-unknown
run: cargo check --locked -p fe-common -p fe-parser -p fe-hir --target wasm32-unknown-unknown
- name: Check filesystem crates for wasm32-wasip1
run: cargo check --locked -p fe-driver -p fe-resolver --target wasm32-wasip1
release:
# Only run this when we push a tag
if: startsWith(github.ref, 'refs/tags/')
runs-on: ${{ matrix.os }}
needs: [lint, test, wasm-wasi-check]
permissions:
contents: write
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
BIN_FILE: fe_linux_amd64
EXT: ""
EXTRA_FEATURES: ""
STRIP: strip
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
BIN_FILE: fe_linux_arm64
EXT: ""
EXTRA_FEATURES: ""
STRIP: aarch64-linux-gnu-strip
- os: macOS-latest
target: aarch64-apple-darwin
BIN_FILE: fe_mac_arm64
EXT: ""
EXTRA_FEATURES: ""
STRIP: strip
- os: macOS-latest
target: x86_64-apple-darwin
BIN_FILE: fe_mac_amd64
EXT: ""
EXTRA_FEATURES: ""
STRIP: strip
- os: windows-latest
target: x86_64-pc-windows-msvc
BIN_FILE: fe_windows_amd64.exe
EXT: ".exe"
EXTRA_FEATURES: ""
STRIP: ""
steps:
- uses: actions/checkout@v5
- name: Install cross-compilation toolchain (Linux ARM64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
- name: Install rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
targets: ${{ matrix.target }}
- name: Build
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
run: cargo build --locked --release --target ${{ matrix.target }} ${{ matrix.EXTRA_FEATURES }}
- name: Strip binary (Unix)
if: runner.os != 'Windows'
run: ${{ matrix.STRIP }} target/${{ matrix.target }}/release/fe
- name: Rename binary
shell: bash
run: mv target/${{ matrix.target }}/release/fe${{ matrix.EXT }} target/${{ matrix.target }}/release/${{ matrix.BIN_FILE }}
- name: Release
uses: softprops/action-gh-release@v2
with:
files: target/${{ matrix.target }}/release/${{ matrix.BIN_FILE }}
prerelease: true
docs:
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '-')
runs-on: ubuntu-latest
needs: [release]
steps:
- uses: actions/checkout@v5
- name: Download fe binary from release
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release download "$GITHUB_REF_NAME" --pattern 'fe_linux_amd64' --dir /tmp
chmod +x /tmp/fe_linux_amd64
- name: Generate documentation
run: |
mkdir -p /tmp/docs-out
timeout 300 /tmp/fe_linux_amd64 doc --builtins -o /tmp/docs-out json
/tmp/fe_linux_amd64 doc -o /tmp/docs-out bundle --with-css
python3 -c "
import json, sys
with open('/tmp/docs-out/docs.json') as f:
d = json.load(f)
sv = d.get('schema_version')
cv = d.get('compiler_version')
if not sv or not cv:
print(f'ERROR: missing schema_version={sv} or compiler_version={cv}', file=sys.stderr)
sys.exit(1)
print(f'docs.json: schema v{sv}, compiler v{cv}, {len(d[\"index\"][\"items\"])} items')
"
- name: Deploy to doc site
uses: actions/checkout@v5
with:
repository: fe-lang/fe-docs
token: ${{ secrets.DOC_DEPLOY_TOKEN }}
path: fe-docs
ref: main
- name: Deploy docs
run: |
cd fe-docs
make deploy VERSION="${GITHUB_REF_NAME#v}" OUTDIR=/tmp/docs-out
- name: Push doc site
run: |
cd fe-docs
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add versions.json fe-web.js fe-highlight.css styles.css "${GITHUB_REF_NAME#v}/"
if git diff-index --quiet HEAD; then
echo "No changes to deploy"
exit 0
fi
git commit -m "Deploy docs for $GITHUB_REF_NAME"
for attempt in 1 2 3; do
if git push; then
exit 0
fi
echo "Push failed (attempt $attempt), rebasing..."
git pull --rebase
done
echo "ERROR: Failed to push after 3 attempts" >&2
exit 1