Skip to content

Solana: Implement a CLI Command for Program Deployment #6309

Solana: Implement a CLI Command for Program Deployment

Solana: Implement a CLI Command for Program Deployment #6309

Workflow file for this run

name: Build tests
on:
push:
branches:
- main
pull_request:
workflow_dispatch:
jobs:
repolinter:
name: Repolinter
runs-on: solang-ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v3
- 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/[email protected]
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/[email protected] 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-6
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: recursive
- name: Rust stable
run: rustup default 1.70.0
- 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 llvm --bins -- -D warnings
- name: Run cargo clippy without llvm feature
run: cargo clippy --workspace --no-default-features --lib -- -D warnings
- name: Run cargo doc
run: cargo doc --workspace --bins
- name: Run cargo fmt
run: cargo fmt --all -- --check
- name: Build
if: always()
run: cargo build --verbose
- name: Run tests
if: always()
run: cargo test --verbose --workspace
- uses: actions/[email protected]
with:
name: solang-linux-x86-64
path: ./target/debug/solang
linux-arm:
name: Linux Arm
runs-on: linux-arm64
if: ${{ github.repository_owner == 'hyperledger' }}
container: ghcr.io/hyperledger/solang-llvm:ci-6
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: recursive
- name: Rust stable
run: rustup default 1.70.0
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose --workspace
- uses: actions/[email protected]
with:
name: solang-linux-arm64
path: ./target/debug/solang
windows:
name: Windows
runs-on: windows-latest
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: recursive
- name: Download LLVM
run: curl -sSL -o c:\llvm.zip https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-win.zip
- name: Extract LLVM
run: unzip c:\llvm.zip -d c:/
- name: Add LLVM to Path
run: echo "c:\llvm15.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/[email protected]
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/[email protected]
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: [self-hosted, macOS, ARM64, MacStadium]
if: ${{ github.repository_owner == 'hyperledger' }}
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: recursive
- uses: dtolnay/[email protected]
- name: Get LLVM
run: curl -sSL --output llvm15.0-mac-arm.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-mac-arm.tar.xz
- name: Extract LLVM
run: tar Jxf llvm15.0-mac-arm.tar.xz
- name: Add LLVM to Path
run: echo "$(pwd)/llvm15.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 llvm
- uses: actions/[email protected]
with:
name: solang-mac-arm
path: ./target/debug/solang
mac-intel:
name: Mac Intel
runs-on: macos-11
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: recursive
- uses: dtolnay/[email protected]
- name: Get LLVM
run: wget -q -O llvm15.0-mac-intel.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-mac-intel.tar.xz
- name: Extract LLVM
run: tar Jxf llvm15.0-mac-intel.tar.xz
- name: Add LLVM to Path
run: echo "$(pwd)/llvm15.0/bin" >> $GITHUB_PATH
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose --workspace
- uses: actions/[email protected]
with:
name: solang-mac-intel
path: ./target/debug/solang
mac-universal:
name: Mac Universal Binary
runs-on: macos-11
needs: [mac-arm, mac-intel]
steps:
- uses: actions/download-artifact@v3
with:
name: solang-mac-intel
- run: mv solang solang-mac-intel
- uses: actions/download-artifact@v3
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/[email protected]
with:
name: solang-mac
path: solang-mac
container-multiarch:
name: Multiarch Container Image
runs-on: linux-arm64
if: ${{ github.repository_owner == 'hyperledger' }}
steps:
- name: Checkout sources
uses: actions/checkout@v3
- 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}} \
--provenance=false \
--tag ghcr.io/${GITHUB_REPOSITORY}:latest \
--platform linux/arm64,linux/amd64 \
--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-6
needs: linux-x86-64
steps:
- name: Checkout sources
uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
- name: Rust Stable
run: rustup default stable
- name: Setup yarn
run: npm install -g yarn
- uses: actions/download-artifact@v3
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
solana:
name: Solana Integration test
runs-on: solang-ubuntu-latest
container: ghcr.io/hyperledger/solang-llvm:ci-6
needs: linux-x86-64
steps:
- name: Checkout sources
uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
- name: Rust Stable
run: rustup default stable
- uses: actions/download-artifact@v3
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: Test Solana CLI
run: ./cli_test.sh
working-directory: ./integration/solana
polkadot:
name: Polkadot Integration test
runs-on: solang-ubuntu-latest
needs: linux-x86-64
steps:
- name: Checkout sources
uses: actions/checkout@v3
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:054bef6 substrate-contracts-node --dev --rpc-external) >> $GITHUB_OUTPUT
id: substrate
- uses: actions/setup-node@v3
with:
node-version: '16'
- uses: actions/download-artifact@v3
with:
name: solang-linux-x86-64
path: bin
- run: |
chmod 755 ./bin/solang
echo "$(pwd)/bin" >> $GITHUB_PATH
- 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: 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:054bef6 substrate-contracts-node --dev --rpc-external) >> $GITHUB_OUTPUT
id: substrate
- uses: actions/download-artifact@master
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}}
vscode:
name: Visual Code Extension
runs-on: solang-ubuntu-latest
needs: linux-x86-64
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: actions/download-artifact@v3
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@v3
with:
node-version: '16'
- 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
std-lib-tests:
name: Stdlib
runs-on: solang-ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v3
- name: Lints for stdlib
run: |
make lint
working-directory: ./stdlib
- name: Stdlib tests
run: |
make test
./test
working-directory: ./stdlib