| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584 |
- name: Build tests
- on:
- push:
- branches:
- - main
- pull_request:
- workflow_dispatch:
- env:
- LLVM_PROFILE_FILE: ${{ github.workspace }}/target/solang-%p-%10m.profraw
- jobs:
- repolinter:
- name: Repolinter
- runs-on: solang-ubuntu-latest
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- - name: Run repolinter
- run: npx repolinter --rulesetUrl https://raw.githubusercontent.com/hyperledger-labs/hyperledger-community-management-tools/master/repo_structure/repolint.json
- - uses: enarx/spdx@master
- with:
- licenses: Apache-2.0 MIT
- docs:
- name: Docs
- runs-on: solang-ubuntu-latest
- container: ubuntu:22.04
- steps:
- - name: Install Python and git
- run: |
- apt-get update
- apt-get install -y python3-pip git pkg-config libcairo-dev latexmk
- - name: Checkout sources
- uses: actions/checkout@v4
- with:
- # docs/conf.py uses `git describe --tags` which requires full history
- fetch-depth: 0
- - name: Build docs
- working-directory: ./docs
- run: |
- # Without the --add safe.directory we get the following error:
- # fatal: detected dubious ownership in repository at '/__w/solang/solang'
- # actions/checkout@v4 is supposed to fix this, but it does not work
- git config --global --add safe.directory "${GITHUB_WORKSPACE}"
- pip install -r requirements.txt
- make html epub
- linux-x86-64:
- name: Linux x86-64
- runs-on: solang-ubuntu-latest
- container: ghcr.io/hyperledger/solang-llvm:ci-7
- env:
- RUSTFLAGS: -C instrument-coverage -C llvm-args=--instrprof-atomic-counter-update-all --cfg=coverage --cfg=trybuild_no_target
- CARGO_INCREMENTAL: 0
- CARGO_LLVM_COV: 1
- CARGO_LLVM_COV_TARGET_DIR: ${{ github.workspace }}/target
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Install Rust
- uses: dtolnay/rust-toolchain@master
- with:
- toolchain: 1.74.0
- components: |
- llvm-tools
- clippy
- rustfmt
- - name: cargo install cargo-llvm-cov
- uses: taiki-e/install-action@cargo-llvm-cov
- - name: Run cargo clippy
- run: cargo clippy --workspace --tests --bins -- -D warnings
- - name: Run cargo clippy without wasm_opt feature
- run: cargo clippy --workspace --no-default-features --features language_server,llvm,soroban --bins -- -D warnings
- - name: Run cargo clippy without llvm feature
- run: cargo clippy --workspace --no-default-features --lib -- -D warnings
- - name: Run cargo clippy with only soroban feature
- run: cargo clippy --workspace --no-default-features --features soroban,llvm --lib -- -D warnings
- - name: Run cargo doc
- run: cargo doc --workspace --bins
- - name: Run cargo fmt
- run: cargo fmt --all -- --check
- - name: Configure llvm-cov and build
- if: always()
- run: |
- cargo llvm-cov clean --workspace
- cargo build
- - name: Run tests
- if: always()
- run: cargo llvm-cov --all-features --workspace --no-report --jobs 2
- - name: Upload binary
- uses: actions/upload-artifact@v4.4.0
- with:
- name: solang-linux-x86-64
- path: ./target/debug/solang
- - name: Compress test coverage files
- run: |
- rm -r bpf wasm tmp cxxbridge CACHEDIR.TAG
- rm -r debug/build debug/deps debug/examples debug/incremental
- tar -czvf rust-tests.tar.gz *
- working-directory: ./target
- - name: Upload test coverage files
- uses: actions/upload-artifact@v4.4.0
- with:
- name: rust-tests.tar.gz
- path: ./target/rust-tests.tar.gz
- linux-arm:
- name: Linux Arm
- runs-on: solang-arm
- if: ${{ github.repository_owner == 'hyperledger-solang' }}
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Basic build tools
- run: |
- sudo apt-get update
- sudo apt-get install -y gcc g++ make
- - uses: dtolnay/rust-toolchain@1.74.0
- - name: Get LLVM
- run: curl -sSL --output llvm16.0-linux-arm64.tar.xz https://github.com/hyperledger-solang/solang-llvm/releases/download/llvm16-0/llvm16.0-linux-arm64.tar.xz
- - name: Extract LLVM
- run: tar Jxf llvm16.0-linux-arm64.tar.xz
- - name: Add LLVM to Path
- run: echo "$(pwd)/llvm16.0/bin" >> $GITHUB_PATH
- - name: Build
- run: cargo build --verbose
- - name: Run tests
- run: cargo test --verbose --workspace
- - uses: actions/upload-artifact@v4.4.0
- with:
- name: solang-linux-arm64
- path: ./target/debug/solang
- windows:
- name: Windows
- runs-on: windows-latest
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Download LLVM
- run: curl -sSL -o c:\llvm.zip https://github.com/hyperledger-solang/solang-llvm/releases/download/llvm16-0/llvm16.0-win.zip
- - name: Extract LLVM
- run: unzip c:\llvm.zip -d c:/
- - name: Add LLVM to Path
- run: echo "c:\llvm16.0\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
- # Use C:\ as D:\ might run out of space
- - name: "Use C: for rust temporary files"
- run: echo "CARGO_TARGET_DIR=C:\target" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
- - uses: dtolnay/rust-toolchain@1.74.0
- with:
- components: clippy
- # We run clippy on Linux in the lint job above, but this does not check #[cfg(windows)] items
- - name: Run cargo clippy
- run: cargo clippy --workspace --tests --bins -- -D warnings -D clippy::inconsistent-struct-constructor
- - name: Build
- run: cargo build --verbose
- - name: Run tests
- run: cargo test --verbose --workspace
- - uses: actions/upload-artifact@v4.4.0
- with:
- name: solang.exe
- path: C:/target/debug/solang.exe
- # Print disk usage to debug disk space problems
- - run: Get-PSDrive
- if: always()
- mac-arm:
- name: Mac Arm
- runs-on: macos-13-xlarge
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - uses: dtolnay/rust-toolchain@1.74.0
- - name: Get LLVM
- run: curl -sSL --output llvm16.0-mac-arm.tar.xz https://github.com/hyperledger-solang/solang-llvm/releases/download/llvm16-0/llvm16.0-mac-arm.tar.xz
- - name: Extract LLVM
- run: tar Jxf llvm16.0-mac-arm.tar.xz
- - name: Add LLVM to Path
- run: echo "$(pwd)/llvm16.0/bin" >> $GITHUB_PATH
- - name: Build
- run: cargo build --verbose
- - name: Run tests
- run: cargo test --verbose --workspace
- - name: Run tests without wasm_opt
- run: cargo test --verbose --workspace --no-default-features --features language_server,llvm,soroban
- - uses: actions/upload-artifact@v4.4.0
- with:
- name: solang-mac-arm
- path: ./target/debug/solang
- mac-intel:
- name: Mac Intel
- runs-on: macos-12
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - uses: dtolnay/rust-toolchain@1.74.0
- - name: Get LLVM
- run: wget -q -O llvm16.0-mac-intel.tar.xz https://github.com/hyperledger-solang/solang-llvm/releases/download/llvm16-0/llvm16.0-mac-intel.tar.xz
- - name: Extract LLVM
- run: tar Jxf llvm16.0-mac-intel.tar.xz
- - name: Add LLVM to Path
- run: echo "$(pwd)/llvm16.0/bin" >> $GITHUB_PATH
- - name: Build
- run: cargo build --verbose
- - name: Run tests
- run: cargo test --verbose --workspace
- - uses: actions/upload-artifact@v4.4.0
- with:
- name: solang-mac-intel
- path: ./target/debug/solang
- mac-universal:
- name: Mac Universal Binary
- runs-on: macos-12
- needs: [mac-arm, mac-intel]
- steps:
- - uses: actions/download-artifact@v4.1.8
- with:
- name: solang-mac-intel
- - run: mv solang solang-mac-intel
- - uses: actions/download-artifact@v4.1.8
- with:
- name: solang-mac-arm
- - run: mv solang solang-mac-arm
- - run: lipo -create -output solang-mac solang-mac-intel solang-mac-arm
- - uses: actions/upload-artifact@v4.4.0
- with:
- name: solang-mac
- path: solang-mac
- container:
- name: Container Image
- runs-on: solang-ubuntu-latest
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- - run: echo "push=--push" >> $GITHUB_OUTPUT
- id: push
- if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
- - run: |
- echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
- docker buildx build . \
- ${{steps.push.outputs.push}} \
- --tag ghcr.io/${GITHUB_REPOSITORY}:latest \
- --label org.opencontainers.image.description="Solidity Compiler for Solana and Polkadot version $(git describe --tags)"
- anchor:
- name: Anchor Integration test
- runs-on: solang-ubuntu-latest
- container: ghcr.io/hyperledger/solang-llvm:ci-7
- needs: linux-x86-64
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- - uses: actions/setup-node@v4
- with:
- node-version: '16'
- - uses: dtolnay/rust-toolchain@1.74.0
- - name: Setup yarn
- run: npm install -g yarn
- - uses: actions/download-artifact@v4.1.8
- with:
- name: solang-linux-x86-64
- path: bin
- - name: Solang Compiler
- run: |
- chmod 755 ./bin/solang
- echo "$(pwd)/bin" >> $GITHUB_PATH
- # Ensure nohup writes output to a file, not the terminal.
- # If we don't, solana-test-validator might not be able to write its
- # output and exit
- - run: nohup solana-test-validator -q > validator.out &
- - name: Build Anchor test program
- run: |
- yarn install
- anchor build
- working-directory: ./integration/anchor
- - name: Deploy Anchor program
- run: |
- solana -ul airdrop -k id.json 10
- anchor deploy
- working-directory: ./integration/anchor
- - name: Create Solidity interface file for Anchor
- run: yarn parse-idl
- working-directory: ./integration/anchor
- - name: Build Solang contracts
- run: yarn build
- working-directory: ./integration/anchor
- - name: Test Anchor
- run: anchor test --skip-local-validator
- working-directory: ./integration/anchor
- - name: Upload test coverage files
- uses: actions/upload-artifact@v4.4.0
- with:
- name: anchor-tests
- path: ./target/*.profraw
-
- soroban:
- name: Soroban Integration test
- runs-on: solang-ubuntu-latest
- container: ghcr.io/hyperledger/solang-llvm:ci-7
- needs: linux-x86-64
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- - uses: actions/setup-node@v4
- with:
- node-version: '16'
- - uses: dtolnay/rust-toolchain@1.74.0
- - uses: actions/download-artifact@v4.1.8
- with:
- name: solang-linux-x86-64
- path: bin
- - name: Solang Compiler
- run: |
- chmod 755 ./bin/solang
- echo "$(pwd)/bin" >> $GITHUB_PATH
-
- - name: Install Soroban
- run: cargo install --locked soroban-cli --version 21.0.0-rc.1
- - name: Add cargo install location to PATH
- run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH
- - run: npm install
- working-directory: ./integration/soroban
- - name: Build Solang contracts
- run: npm run build
- working-directory: ./integration/soroban
- - name: Setup Soroban enivronment
- run: npm run setup
- working-directory: ./integration/soroban
- - name: Deploy and test contracts
- run: npm run test
- working-directory: ./integration/soroban
- - name: Upload test coverage files
- uses: actions/upload-artifact@v4.4.0
- with:
- name: soroban-tests
- path: ./target/*.profraw
- solana:
- name: Solana Integration test
- runs-on: solang-ubuntu-latest
- container: ghcr.io/hyperledger/solang-llvm:ci-7
- needs: linux-x86-64
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- - uses: actions/setup-node@v4
- with:
- node-version: '16'
- - uses: dtolnay/rust-toolchain@1.74.0
- - uses: actions/download-artifact@v4.1.8
- with:
- name: solang-linux-x86-64
- path: bin
- - name: Solang Compiler
- run: |
- chmod 755 ./bin/solang
- echo "$(pwd)/bin" >> $GITHUB_PATH
- # Ensure nohup writes output to a file, not the terminal.
- # If we don't, solana-test-validator might not be able to write its
- # output and exit
- - run: nohup solana-test-validator -q > validator.out &
- - run: npm install
- working-directory: ./integration/solana
- - name: Build Solang contracts
- run: npm run build
- working-directory: ./integration/solana
- - name: Deploy and test contracts
- run: npm run test
- working-directory: ./integration/solana
- - name: Upload test coverage files
- uses: actions/upload-artifact@v4.4.0
- with:
- name: solana-tests
- path: ./target/*.profraw
- polkadot:
- name: Polkadot Integration test
- runs-on: solang-ubuntu-latest
- needs: linux-x86-64
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- with:
- submodules: recursive
- # We can't run substrate node as a github actions service, since it requires
- # command line arguments. See https://github.com/actions/runner/pull/1152
- - name: Start substrate contracts node
- run: echo id=$(docker run -d -p 9944:9944 ghcr.io/hyperledger/solang-substrate-ci:62a8a6c substrate-contracts-node --dev --rpc-external -lwarn,runtime::contracts=trace) >> $GITHUB_OUTPUT
- id: substrate
- - uses: actions/download-artifact@v4.1.8
- with:
- name: solang-linux-x86-64
- path: bin
- - run: |
- chmod 755 ./bin/solang
- echo "$(pwd)/bin" >> $GITHUB_PATH
- - uses: actions/setup-node@v4
- with:
- node-version: '16'
- - run: npm install
- working-directory: ./integration/polkadot
- - name: Build ink! contracts
- run: npm run build-ink
- working-directory: ./integration/polkadot
- - name: Build Solang contracts
- run: npm run build
- working-directory: ./integration/polkadot
- - name: Deploy and test contracts
- run: npm run test
- working-directory: ./integration/polkadot
- - name: Upload test coverage files
- uses: actions/upload-artifact@v4.4.0
- with:
- name: polkadot-tests
- path: ./target/*.profraw
- - name: cleanup
- if: always()
- run: docker kill ${{steps.substrate.outputs.id}}
- polkadot-subxt:
- name: Polkadot Integration test with subxt
- runs-on: ubuntu-22.04
- needs: linux-x86-64
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- # We can't run substrate node as a github actions service, since it requires
- # command line arguments. See https://github.com/actions/runner/pull/1152
- - name: Start substrate
- run: echo id=$(docker run -d -p 9944:9944 ghcr.io/hyperledger/solang-substrate-ci:62a8a6c substrate-contracts-node --dev --rpc-external -lwarn,runtime::contracts=trace) >> $GITHUB_OUTPUT
- id: substrate
- - uses: actions/download-artifact@v4.1.8
- with:
- name: solang-linux-x86-64
- path: bin
- - run: |
- chmod 755 ./bin/solang
- echo "$(pwd)/bin" >> $GITHUB_PATH
- - name: Install latest rust toolchain
- uses: dtolnay/rust-toolchain@stable
- with:
- toolchain: stable
- - run: 'parallel solang compile -v --target polkadot --wasm-opt z -o ./contracts/ ::: ../polkadot/*.sol ../polkadot/test/*.sol'
- working-directory: ./integration/subxt-tests
- - name: Deploy and test contracts
- run: cargo test -- --test-threads=1
- working-directory: ./integration/subxt-tests
- - name: cleanup
- if: always()
- run: docker kill ${{steps.substrate.outputs.id}}
- - name: Upload test coverage files
- uses: actions/upload-artifact@v4.4.0
- with:
- name: polkadot-subxt-tests
- path: ./target/*.profraw
- vscode:
- name: Visual Code Extension
- runs-on: solang-ubuntu-latest
- needs: linux-x86-64
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - uses: actions/download-artifact@v4.1.8
- with:
- name: solang-linux-x86-64
- path: bin
- - run: |
- chmod 755 ./bin/solang
- echo "$(pwd)/bin" >> $GITHUB_PATH
- - name: Install Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '>=18.17'
- - run: npm install
- working-directory: ./vscode
- - run: npm run compile
- working-directory: ./vscode
- - name: Run headless test
- run: xvfb-run npm test
- working-directory: ./vscode
- - run: npm install -g vsce
- working-directory: ./vscode
- - run: vsce package
- working-directory: ./vscode
- - name: Upload test coverage files
- uses: actions/upload-artifact@v4.4.0
- with:
- name: vscode-tests
- path: ./target/*.profraw
- std-lib-tests:
- name: Stdlib
- runs-on: solang-ubuntu-latest
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- - name: Lints for stdlib
- run: |
- make lint
- working-directory: ./stdlib
- - name: Stdlib tests
- run: |
- make test
- ./test
- working-directory: ./stdlib
- coverage:
- runs-on: ubuntu-latest
- name: Coverage report
- container: ghcr.io/hyperledger/solang-llvm:ci-7
- needs: [linux-x86-64, solana, anchor, polkadot, polkadot-subxt, vscode]
- env:
- RUSTFLAGS: -C instrument-coverage -C llvm-args=--instrprof-atomic-counter-update-all --cfg=coverage --cfg=trybuild_no_target
- CARGO_INCREMENTAL: 0
- CARGO_LLVM_COV: 1
- CARGO_LLVM_COV_TARGET_DIR: ${{ github.workspace }}/target
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Install Rust
- uses: dtolnay/rust-toolchain@master
- with:
- toolchain: 1.74.0
- components: llvm-tools
- - name: Install cargo-llvm-cov
- uses: taiki-e/install-action@cargo-llvm-cov
- - name: Download Rust coverage files
- uses: actions/download-artifact@v4.1.8
- with:
- name: rust-tests.tar.gz
- path: ./target
- - name: Download Solana coverage files
- uses: actions/download-artifact@v4.1.8
- with:
- name: solana-tests
- path: ./target
- - name: Download Polkadot coverage files
- uses: actions/download-artifact@v4.1.8
- with:
- name: polkadot-tests
- path: ./target
- - name: Download Polkadot subxt coverage files
- uses: actions/download-artifact@v4.1.8
- with:
- name: polkadot-subxt-tests
- path: ./target
- - name: Download Anchor coverage files
- uses: actions/download-artifact@v4.1.8
- with:
- name: anchor-tests
- path: ./target
- - name: Download VSCode coverage files
- uses: actions/download-artifact@v4.1.8
- with:
- name: vscode-tests
- path: ./target
- - name: Unpack test coverage files
- run: tar -xf rust-tests.tar.gz
- working-directory: ./target
- - name: Generate code report
- run: cargo llvm-cov report --lcov --output-path lcov.info
- - name: Upload coverage report to codecov.io
- uses: codecov/codecov-action@v3
- env:
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- with:
- fail_ci_if_error: false
|