Update to solang v0.3.2 and add simple test (#2636)

This commit is contained in:
Sean Young 2023-09-26 21:55:41 +01:00 committed by GitHub
parent 28adaf2343
commit 3e8bc76d72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 197 additions and 15 deletions

View File

@ -10,7 +10,7 @@ runs:
path: | path: |
~/.cache/solana/ ~/.cache/solana/
~/.local/share/solana/ ~/.local/share/solana/
key: solana-${{ runner.os }}-v0000-${{ env.SOLANA_CLI_VERSION }} key: solana-${{ runner.os }}-v0000-${{ env.SOLANA_CLI_VERSION }}-${{ env.SOLANG_VERSION }}
- uses: nick-fields/retry@v2 - uses: nick-fields/retry@v2
if: steps.cache-solana.outputs.cache-hit != 'true' if: steps.cache-solana.outputs.cache-hit != 'true'
with: with:
@ -20,6 +20,18 @@ runs:
retry_on: error retry_on: error
shell: bash shell: bash
command: sh -c "$(curl -sSfL https://release.solana.com/v${{ env.SOLANA_CLI_VERSION }}/install)" command: sh -c "$(curl -sSfL https://release.solana.com/v${{ env.SOLANA_CLI_VERSION }}/install)"
- uses: nick-fields/retry@v2
if: steps.cache-solana.outputs.cache-hit != 'true'
with:
retry_wait_seconds: 300
timeout_minutes: 2
max_attempts: 10
retry_on: error
shell: bash
command: |
curl -sSL -o /home/runner/.local/share/solana/install/active_release/bin/solang \
https://github.com/hyperledger/solang/releases/download/v${{ env.SOLANG_VERSION }}/solang-linux-x86-64
chmod 755 /home/runner/.local/share/solana/install/active_release/bin/solang
- run: echo "/home/runner/.local/share/solana/install/active_release/bin" >> $GITHUB_PATH - run: echo "/home/runner/.local/share/solana/install/active_release/bin" >> $GITHUB_PATH
shell: bash shell: bash
- run: solana-keygen new --no-bip39-passphrase - run: solana-keygen new --no-bip39-passphrase

View File

@ -12,6 +12,7 @@ jobs:
with: with:
cache: false cache: false
solana_cli_version: 1.16.0 solana_cli_version: 1.16.0
solang_version: 0.3.2
node_version: 17.0.1 node_version: 17.0.1
cargo_profile: release cargo_profile: release
anchor_binary_name: anchor-binary-no-caching anchor_binary_name: anchor-binary-no-caching

View File

@ -9,6 +9,9 @@ on:
solana_cli_version: solana_cli_version:
required: true required: true
type: string type: string
solang_version:
required: true
type: string
node_version: node_version:
required: true required: true
type: string type: string
@ -21,6 +24,7 @@ on:
env: env:
CACHE: inputs.cache CACHE: inputs.cache
SOLANA_CLI_VERSION: ${{ inputs.solana_cli_version }} SOLANA_CLI_VERSION: ${{ inputs.solana_cli_version }}
SOLANG_VERSION: ${{ inputs.solang_version }}
NODE_VERSION: ${{ inputs.node_version }} NODE_VERSION: ${{ inputs.node_version }}
CARGO_PROFILE: ${{ inputs.cargo_profile }} CARGO_PROFILE: ${{ inputs.cargo_profile }}
ANCHOR_BINARY_NAME: ${{ inputs.anchor_binary_name }} ANCHOR_BINARY_NAME: ${{ inputs.anchor_binary_name }}
@ -445,6 +449,8 @@ jobs:
path: tests/bench path: tests/bench
- cmd: cd tests/idl && ./test.sh - cmd: cd tests/idl && ./test.sh
path: tests/idl path: tests/idl
- cmd: cd tests/solang && anchor test
path: tests/solang
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: ./.github/actions/setup/ - uses: ./.github/actions/setup/

View File

@ -15,6 +15,7 @@ jobs:
with: with:
cache: true cache: true
solana_cli_version: 1.16.0 solana_cli_version: 1.16.0
solang_version: 0.3.2
node_version: 17.0.1 node_version: 17.0.1
cargo_profile: debug cargo_profile: debug
anchor_binary_name: anchor-binary anchor_binary_name: anchor-binary

15
Cargo.lock generated
View File

@ -2189,6 +2189,15 @@ dependencies = [
"either", "either",
] ]
[[package]]
name = "itertools"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
dependencies = [
"either",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.6" version = "1.0.6"
@ -4504,11 +4513,11 @@ dependencies = [
[[package]] [[package]]
name = "solang-parser" name = "solang-parser"
version = "0.3.1" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c792fe9fae2a2f716846f214ca10d5a1e21133e0bf36cef34bcc4a852467b21" checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457"
dependencies = [ dependencies = [
"itertools 0.10.5", "itertools 0.11.0",
"lalrpop", "lalrpop",
"lalrpop-util", "lalrpop-util",
"phf", "phf",

View File

@ -41,7 +41,7 @@ solana-cli-config = ">=1.14, <1.17"
solana-faucet = ">=1.14, <1.17" solana-faucet = ">=1.14, <1.17"
solana-program = ">=1.14, <1.17" solana-program = ">=1.14, <1.17"
solana-sdk = ">=1.14, <1.17" solana-sdk = ">=1.14, <1.17"
solang-parser = "=0.3.1" solang-parser = "=0.3.2"
syn = { version = "1.0.60", features = ["full", "extra-traits"] } syn = { version = "1.0.60", features = ["full", "extra-traits"] }
tar = "0.4.35" tar = "0.4.35"
toml = "0.7.6" toml = "0.7.6"

View File

@ -114,6 +114,8 @@ impl Manifest {
let mut cwd_opt = Some(start_from.as_path()); let mut cwd_opt = Some(start_from.as_path());
while let Some(cwd) = cwd_opt { while let Some(cwd) = cwd_opt {
let mut anchor_toml = false;
for f in fs::read_dir(cwd).with_context(|| { for f in fs::read_dir(cwd).with_context(|| {
format!("Error reading the directory with path: {}", cwd.display()) format!("Error reading the directory with path: {}", cwd.display())
})? { })? {
@ -127,10 +129,17 @@ impl Manifest {
let m = WithPath::new(Manifest::from_path(&p)?, p); let m = WithPath::new(Manifest::from_path(&p)?, p);
return Ok(Some(m)); return Ok(Some(m));
} }
if filename.to_str() == Some("Anchor.toml") {
anchor_toml = true;
}
} }
} }
// Not found. Go up a directory level. // Not found. Go up a directory level, but don't go up from Anchor.toml
if anchor_toml {
break;
}
cwd_opt = cwd.parent(); cwd_opt = cwd.parent();
} }

View File

@ -133,7 +133,7 @@ contract {} {{
bool private value = true; bool private value = true;
@payer(payer) @payer(payer)
constructor(address payer) {{ constructor() {{
print("Hello, World!"); print("Hello, World!");
}} }}
@ -318,22 +318,27 @@ describe("{}", () => {{
it("Is initialized!", async () => {{ it("Is initialized!", async () => {{
// Add your test here. // Add your test here.
const tx = await program.methods.new(wallet.publicKey) const tx = await program.methods
.new()
.accounts({{ dataAccount: dataAccount.publicKey }}) .accounts({{ dataAccount: dataAccount.publicKey }})
.signers([dataAccount]).rpc(); .signers([dataAccount])
.rpc();
console.log("Your transaction signature", tx); console.log("Your transaction signature", tx);
const val1 = await program.methods.get() const val1 = await program.methods
.get()
.accounts({{ dataAccount: dataAccount.publicKey }}) .accounts({{ dataAccount: dataAccount.publicKey }})
.view(); .view();
console.log("state", val1); console.log("state", val1);
await program.methods.flip() await program.methods
.flip()
.accounts({{ dataAccount: dataAccount.publicKey }}) .accounts({{ dataAccount: dataAccount.publicKey }})
.rpc(); .rpc();
const val2 = await program.methods.get() const val2 = await program.methods
.get()
.accounts({{ dataAccount: dataAccount.publicKey }}) .accounts({{ dataAccount: dataAccount.publicKey }})
.view(); .view();
@ -366,9 +371,11 @@ describe("{}", () => {{
it("Is initialized!", async () => {{ it("Is initialized!", async () => {{
// Add your test here. // Add your test here.
const tx = await program.methods.new(wallet.publicKey) const tx = await program.methods
.new()
.accounts({{ dataAccount: dataAccount.publicKey }}) .accounts({{ dataAccount: dataAccount.publicKey }})
.signers([dataAccount]).rpc(); .signers([dataAccount])
.rpc();
console.log("Your transaction signature", tx); console.log("Your transaction signature", tx);
}}); }});
}}); }});

View File

@ -43,7 +43,8 @@
"cpi-returns", "cpi-returns",
"multiple-suites", "multiple-suites",
"multiple-suites-run-single", "multiple-suites-run-single",
"bpf-upgradeable-state" "bpf-upgradeable-state",
"solang"
], ],
"dependencies": { "dependencies": {
"@project-serum/common": "^0.0.1-beta.3", "@project-serum/common": "^0.0.1-beta.3",

8
tests/solang/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
.anchor
.DS_Store
target
**/*.rs.bk
node_modules
test-ledger
.yarn

View File

@ -0,0 +1,8 @@
.anchor
.DS_Store
target
node_modules
dist
build
test-ledger

13
tests/solang/Anchor.toml Normal file
View File

@ -0,0 +1,13 @@
[features]
seeds = false
skip-lint = false
[programs.localnet]
flipper = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC"
[provider]
cluster = "Localnet"
wallet = "~/.config/solana/id.json"
[scripts]
test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"

View File

@ -0,0 +1,12 @@
// Migrations are an early feature. Currently, they're nothing more than this
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
const anchor = require("@coral-xyz/anchor");
module.exports = async function (provider) {
// Configure client to use the provider.
anchor.setProvider(provider);
// Add your deploy script here.
};

19
tests/solang/package.json Normal file
View File

@ -0,0 +1,19 @@
{
"name": "solang",
"version": "0.28.0",
"license": "(MIT OR Apache-2.0)",
"homepage": "https://github.com/coral-xyz/anchor#readme",
"bugs": {
"url": "https://github.com/coral-xyz/anchor/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/coral-xyz/anchor.git"
},
"engines": {
"node": ">=11"
},
"scripts": {
"test": "anchor run test-with-build"
}
}

View File

@ -0,0 +1,22 @@
@program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
contract flipper {
bool private value = true;
@payer(payer)
constructor() {
print("Hello, World!");
}
/// A message that can be called on instantiated contracts.
/// This one flips the value of the stored `bool` from `true`
/// to `false` and vice versa.
function flip() public {
value = !value;
}
/// Simply returns the current value of our `bool`.
function get() public view returns (bool) {
return value;
}
}

View File

@ -0,0 +1,43 @@
import * as anchor from "@coral-xyz/anchor";
import { Program } from "@coral-xyz/anchor";
import { Flipper } from "../target/types/flipper";
describe("flipper", () => {
// Configure the client to use the local cluster.
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const dataAccount = anchor.web3.Keypair.generate();
const wallet = provider.wallet;
const program = anchor.workspace.Flipper as Program<Flipper>;
it("Is initialized!", async () => {
// Add your test here.
const tx = await program.methods
.new()
.accounts({ dataAccount: dataAccount.publicKey })
.signers([dataAccount])
.rpc();
console.log("Your transaction signature", tx);
const val1 = await program.methods
.get()
.accounts({ dataAccount: dataAccount.publicKey })
.view();
console.log("state", val1);
await program.methods
.flip()
.accounts({ dataAccount: dataAccount.publicKey })
.rpc();
const val2 = await program.methods
.get()
.accounts({ dataAccount: dataAccount.publicKey })
.view();
console.log("state", val2);
});
});

View File

@ -0,0 +1,11 @@
{
"compilerOptions": {
"types": ["mocha", "chai"],
"typeRoots": ["./node_modules/@types"],
"lib": ["es2015"],
"module": "commonjs",
"target": "es6",
"esModuleInterop": true,
"skipLibCheck": true
}
}