--- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,15 +54,43 @@ strategy: matrix: target: + # Tier 1 + - aarch64-unknown-linux-gnu + - i686-pc-windows-gnu + - i686-pc-windows-msvc + - i686-unknown-linux-gnu - x86_64-apple-darwin + - x86_64-pc-windows-gnu - x86_64-pc-windows-msvc - x86_64-unknown-linux-gnu + + # Other - x86_64-unknown-linux-musl include: + - target: aarch64-unknown-linux-gnu + os: ubuntu-latest + bin: jrsonnet + name: jrsonnet-linux-gnu-aarch64 + - target: i686-pc-windows-gnu + os: windows-latest + bin: jrsonnet.exe + name: jrsonnet-windows-gnu-i686.exe + - target: i686-pc-windows-msvc + os: windows-latest + bin: jrsonnet.exe + name: jrsonnet-windows-msvc-i686.exe + - target: i686-unknown-linux-gnu + os: ubuntu-latest + bin: jrsonnet + name: jrsonnet-linux-gnu-i686 - target: x86_64-apple-darwin os: macOS-latest bin: jrsonnet name: jrsonnet-darwin-amd64 + - target: x86_64-pc-windows-gnu + os: windows-latest + bin: jrsonnet.exe + name: jrsonnet-windows-gnu-amd64.exe - target: x86_64-pc-windows-msvc os: windows-latest bin: jrsonnet.exe @@ -71,6 +99,7 @@ os: ubuntu-latest bin: jrsonnet name: jrsonnet-linux-gnu-amd64 + - target: x86_64-unknown-linux-musl os: ubuntu-latest bin: jrsonnet @@ -87,16 +116,52 @@ - name: Checkout uses: actions/checkout@v2 + - name: Linux x86 cross compiler + if: ${{ matrix.target == 'i686-unknown-linux-gnu' }} + run: sudo apt install gcc-multilib + + - name: Windows x86 cross compiler + if: ${{ matrix.target == 'i686-pc-windows-gnu' }} + uses: egor-tensin/setup-mingw@v2 + with: + platform: x86 + + - name: ARM cross compiler + if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }} + uses: actions-rs/cargo@v1 + with: + command: install + args: cross + + - name: ARM gcc + if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }} + run: sudo apt install gcc-aarch64-linux-gnu + + - name: Run ARM build + if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }} + shell: bash + run: cross build --bin=jrsonnet --release --target ${{ matrix.target }} + + - name: Run ARM strip + if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }} + shell: bash + run: aarch64-linux-gnu-strip target/${{ matrix.target }}/release/${{ matrix.bin }} + - name: Run build + if: ${{ matrix.target != 'aarch64-unknown-linux-gnu' }} uses: actions-rs/cargo@v1 with: command: build args: --bin=jrsonnet --release --target ${{ matrix.target }} + - name: Run strip + if: ${{ matrix.target != 'aarch64-unknown-linux-gnu' }} + shell: bash + run: strip target/${{ matrix.target }}/release/${{ matrix.bin }} + - name: Package shell: bash run: | - strip target/${{ matrix.target }}/release/${{ matrix.bin }} cd target/${{ matrix.target }}/release cp ${{ matrix.bin }} ../../../${{ matrix.name }} --- a/Cargo.lock +++ b/Cargo.lock @@ -65,8 +65,7 @@ [[package]] name = "clap" version = "3.0.0-beta.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd1061998a501ee7d4b6d449020df3266ca3124b941ec56cf2005c3779ca142" +source = "git+https://github.com/clap-rs/clap?rev=92f744cc49d12d32261010d355dc215a6d2487b9#92f744cc49d12d32261010d355dc215a6d2487b9" dependencies = [ "atty", "bitflags", @@ -77,15 +76,13 @@ "strsim", "termcolor", "textwrap", - "unicode-width", "vec_map", ] [[package]] name = "clap_derive" version = "3.0.0-beta.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370f715b81112975b1b69db93e0b56ea4cd4e5002ac43b2da8474106a54096a1" +source = "git+https://github.com/clap-rs/clap?rev=92f744cc49d12d32261010d355dc215a6d2487b9#92f744cc49d12d32261010d355dc215a6d2487b9" dependencies = [ "heck", "proc-macro-error", @@ -97,8 +94,7 @@ [[package]] name = "clap_generate" version = "3.0.0-beta.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf420f8b687b628d2915ccfd43a660c437a170432e3fbcb66944e8717a0d68f" +source = "git+https://github.com/clap-rs/clap?rev=92f744cc49d12d32261010d355dc215a6d2487b9#92f744cc49d12d32261010d355dc215a6d2487b9" dependencies = [ "clap", ] @@ -166,7 +162,7 @@ [[package]] name = "jrsonnet" -version = "0.3.7" +version = "0.3.8" dependencies = [ "clap", "clap_generate", @@ -179,7 +175,7 @@ [[package]] name = "jrsonnet-cli" -version = "0.3.7" +version = "0.3.8" dependencies = [ "clap", "jrsonnet-evaluator", @@ -188,7 +184,7 @@ [[package]] name = "jrsonnet-evaluator" -version = "0.3.7" +version = "0.3.8" dependencies = [ "annotate-snippets", "anyhow", @@ -209,7 +205,7 @@ [[package]] name = "jrsonnet-interner" -version = "0.3.7" +version = "0.3.8" dependencies = [ "gc", "rustc-hash", @@ -218,7 +214,7 @@ [[package]] name = "jrsonnet-parser" -version = "0.3.7" +version = "0.3.8" dependencies = [ "gc", "jrsonnet-interner", @@ -230,11 +226,11 @@ [[package]] name = "jrsonnet-stdlib" -version = "0.3.7" +version = "0.3.8" [[package]] name = "jrsonnet-types" -version = "0.3.7" +version = "0.3.8" dependencies = [ "gc", "peg", @@ -242,7 +238,7 @@ [[package]] name = "jsonnet" -version = "0.3.7" +version = "0.3.8" dependencies = [ "jrsonnet-evaluator", "jrsonnet-interner", @@ -288,9 +284,9 @@ [[package]] name = "os_str_bytes" -version = "2.4.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" +checksum = "e293568965aea261bdf010db17df7030e3c9a275c415d51d6112f7cf9b7af012" [[package]] name = "pathdiff" @@ -450,9 +446,9 @@ [[package]] name = "textwrap" -version = "0.12.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203008d98caf094106cfaba70acfed15e18ed3ddb7d94e49baec153a2b462789" +checksum = "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835" dependencies = [ "unicode-width", ] --- a/README.md +++ b/README.md @@ -16,10 +16,6 @@ In the end, it's always fun to implement something in Rust. -## How to install? - -We build x64 binaries for Apple, Windows MSVC, and Linux GNU during the release process. If your system is one of those, you can check out the [latest release](https://github.com/CertainLach/jrsonnet/releases/latest) to get your pre-built binary. Otherwise, you'll need to have a rust toolchain and install the package through cargo with `cargo install jrsonnet`. - ## Compliance with the [specification](https://jsonnet.org/ref/spec.html) - Passes all the original `examples` tests --- a/bindings/jsonnet/Cargo.toml +++ b/bindings/jsonnet/Cargo.toml @@ -1,16 +1,16 @@ [package] name = "jsonnet" description = "Rust implementation of libjsonnet.so" -version = "0.3.7" +version = "0.3.8" authors = ["Yaroslav Bolyukin "] license = "MIT" edition = "2018" publish = false [dependencies] -jrsonnet-interner = { path = "../../crates/jrsonnet-interner", version = "0.3.7" } -jrsonnet-evaluator = { path = "../../crates/jrsonnet-evaluator", version = "0.3.7" } -jrsonnet-parser = { path = "../../crates/jrsonnet-parser", version = "0.3.7" } +jrsonnet-interner = { path = "../../crates/jrsonnet-interner", version = "0.3.8" } +jrsonnet-evaluator = { path = "../../crates/jrsonnet-evaluator", version = "0.3.8" } +jrsonnet-parser = { path = "../../crates/jrsonnet-parser", version = "0.3.8" } [lib] crate-type = ["cdylib"] --- a/cmds/jrsonnet/Cargo.toml +++ b/cmds/jrsonnet/Cargo.toml @@ -1,10 +1,11 @@ [package] name = "jrsonnet" description = "Rust jsonnet implementation" -version = "0.3.7" +version = "0.3.8" authors = ["Yaroslav Bolyukin "] license = "MIT" edition = "2018" +publish = false [features] default = [] @@ -12,11 +13,17 @@ mimalloc = [] [dependencies] -jrsonnet-evaluator = { path = "../../crates/jrsonnet-evaluator", version = "0.3.7" } -jrsonnet-parser = { path = "../../crates/jrsonnet-parser", version = "0.3.7" } -jrsonnet-cli = { path = "../../crates/jrsonnet-cli", version = "0.3.7" } +jrsonnet-evaluator = { path = "../../crates/jrsonnet-evaluator", version = "0.3.8" } +jrsonnet-parser = { path = "../../crates/jrsonnet-parser", version = "0.3.8" } +jrsonnet-cli = { path = "../../crates/jrsonnet-cli", version = "0.3.8" } # TODO: Fix mimalloc compile errors, and use them mimallocator = { version = "0.1.3", optional = true } thiserror = "1.0" -clap = "3.0.0-beta.2" -clap_generate = "3.0.0-beta.2" + +[dependencies.clap] +git = "https://github.com/clap-rs/clap" +rev = "92f744cc49d12d32261010d355dc215a6d2487b9" + +[dependencies.clap_generate] +git = "https://github.com/clap-rs/clap" +rev = "92f744cc49d12d32261010d355dc215a6d2487b9" --- a/crates/jrsonnet-cli/Cargo.toml +++ b/crates/jrsonnet-cli/Cargo.toml @@ -1,12 +1,16 @@ [package] name = "jrsonnet-cli" description = "Utilities for building jrsonnet CLIs" -version = "0.3.7" +version = "0.3.8" authors = ["Yaroslav Bolyukin "] license = "MIT" edition = "2018" +publish = false [dependencies] -jrsonnet-evaluator = { path = "../../crates/jrsonnet-evaluator", version = "0.3.7", features = ["explaining-traces"] } -jrsonnet-parser = { path = "../../crates/jrsonnet-parser", version = "0.3.7" } -clap = "3.0.0-beta.2" +jrsonnet-evaluator = { path = "../../crates/jrsonnet-evaluator", version = "0.3.6", features = ["explaining-traces"] } +jrsonnet-parser = { path = "../../crates/jrsonnet-parser", version = "0.3.6" } + +[dependencies.clap] +git = "https://github.com/clap-rs/clap" +rev = "92f744cc49d12d32261010d355dc215a6d2487b9" --- a/crates/jrsonnet-evaluator/Cargo.toml +++ b/crates/jrsonnet-evaluator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "jrsonnet-evaluator" description = "jsonnet interpreter" -version = "0.3.7" +version = "0.3.8" authors = ["Yaroslav Bolyukin "] license = "MIT" edition = "2018" @@ -24,10 +24,10 @@ unstable = [] [dependencies] -jrsonnet-interner = { path = "../jrsonnet-interner", version = "0.3.7" } -jrsonnet-parser = { path = "../jrsonnet-parser", version = "0.3.7" } -jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.7" } -jrsonnet-types = { path = "../jrsonnet-types", version = "0.3.7" } +jrsonnet-interner = { path = "../jrsonnet-interner", version = "0.3.8" } +jrsonnet-parser = { path = "../jrsonnet-parser", version = "0.3.8" } +jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.8" } +jrsonnet-types = { path = "../jrsonnet-types", version = "0.3.8" } pathdiff = "0.2.0" md5 = "0.7.0" @@ -61,7 +61,7 @@ optional = true [build-dependencies] -jrsonnet-parser = { path = "../jrsonnet-parser", features = ["serialize", "deserialize"], version = "0.3.7" } -jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.7" } +jrsonnet-parser = { path = "../jrsonnet-parser", features = ["serialize", "deserialize"], version = "0.3.8" } +jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.8" } serde = "1.0" bincode = "1.3.1" --- /dev/null +++ b/crates/jrsonnet-interner/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock --- a/crates/jrsonnet-interner/Cargo.toml +++ b/crates/jrsonnet-interner/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "jrsonnet-interner" description = "Jrsonnet string interning" -version = "0.3.7" +version = "0.3.8" authors = ["Yaroslav Bolyukin "] license = "MIT" edition = "2018" --- a/crates/jrsonnet-parser/Cargo.toml +++ b/crates/jrsonnet-parser/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "jrsonnet-parser" description = "jsonnet language parser and AST" -version = "0.3.7" +version = "0.3.8" authors = ["Yaroslav Bolyukin "] license = "MIT" edition = "2018" @@ -12,7 +12,7 @@ deserialize = ["serde"] [dependencies] -jrsonnet-interner = { path = "../jrsonnet-interner", version = "0.3.7" } +jrsonnet-interner = { path = "../jrsonnet-interner", version = "0.3.8" } peg = "0.7.0" unescape = "0.1.0" @@ -21,4 +21,4 @@ gc = { version = "0.4.1", features = ["derive"] } [dev-dependencies] -jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.7" } +jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.8" } --- a/crates/jrsonnet-stdlib/Cargo.toml +++ b/crates/jrsonnet-stdlib/Cargo.toml @@ -1,7 +1,11 @@ [package] name = "jrsonnet-stdlib" description = "jsonnet standard library packaged as crate" -version = "0.3.7" +version = "0.3.8" authors = ["Yaroslav Bolyukin "] license = "MIT" edition = "2018" + +[features] + +[dependencies] --- a/crates/jrsonnet-types/Cargo.toml +++ b/crates/jrsonnet-types/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "jrsonnet-types" description = "Jrsonnet type system definition" -version = "0.3.7" +version = "0.3.8" authors = ["Yaroslav Bolyukin "] license = "MIT" edition = "2018"