git.delta.rocks / jrsonnet / refs/commits / cead2c336a71

difftreelog

Merge commit 'd93ca83fe3668f134c0a705b972e2b52072ebf3d'

Yaroslav Bolyukin2021-05-23parents: #b148741 #d93ca83.patch.diff
in: master

3 files changed

modified.github/workflows/release.ymldiffbeforeafterboth
before · .github/workflows/release.yml
1name: CI23on: [push]45jobs:6  test:7    name: Test Suite8    runs-on: ubuntu-latest9    steps:10      - name: Checkout sources11        uses: actions/checkout@v212      - name: Install stable toolchain13        uses: actions-rs/toolchain@v114        with:15          toolchain: stable16          override: true17      - name: Run tests18        uses: actions-rs/cargo@v119        with:20          command: test21          args: --all2223  cargo-release:24    if: startsWith(github.ref, 'refs/tags/')25    needs: [test]26    runs-on: ubuntu-latest27    steps:28      - name: Checkout sources29        uses: actions/checkout@v230      - name: Install stable toolchain31        uses: actions-rs/toolchain@v132        with:33          toolchain: stable34          override: true35      - name: Install cargo release command36        uses: actions-rs/cargo@v137        with:38          command: install39          args: cargo-release40      - name: Run cargo login41        uses: actions-rs/cargo@v142        with:43          command: login44          args: ${{ secrets.CARGO_TOKEN }}45      - name: Publish crates46        uses: actions-rs/cargo@v147        with:48          command: release49          args: --no-dev-version --skip-push --skip-tag --no-confirm5051  github-release:52    if: startsWith(github.ref, 'refs/tags/')53    needs: [test]54    strategy:55      matrix:56        os: [ubuntu-latest, macOS-latest, windows-latest]57        include:58          - os: ubuntu-latest59            rust: stable60            target: x86_64-unknown-linux-musl61            bin: jrsonnet62            name: jrsonnet-linux-amd6463          - os: windows-latest64            rust: stable65            target: x86_64-pc-windows-msvc66            bin: jrsonnet.exe67            name: jrsonnet-windows-amd64.exe68          - os: macOS-latest69            rust: stable70            target: x86_64-apple-darwin71            bin: jrsonnet72            name: jrsonnet-darwin-amd6473    runs-on: ${{ matrix.os }}74    steps:75      - name: Install stable toolchain76        uses: actions-rs/toolchain@v177        with:78          toolchain: ${{ matrix.rust }}79          override: true80          target: ${{ matrix.target }}81      - name: Checkout82        uses: actions/checkout@v283      - name: Run build84        uses: actions-rs/cargo@v185        with:86          command: build87          args: --bin=jrsonnet --release --target ${{ matrix.target }}88      - name: Package89        shell: bash90        run: |91          strip target/${{ matrix.target }}/release/${{ matrix.bin }}92          cd target/${{ matrix.target }}/release9394          cp ${{ matrix.bin }} ../../../${{ matrix.name }}95          cd -96      - name: Generate SHA-25697        run: shasum -a 256 ${{ matrix.name }} > ${{ matrix.name }}.sha25698      - name: Publish99        uses: softprops/action-gh-release@v1100        with:101          draft: true102          files: "jrsonnet*"103        env:104          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
after · .github/workflows/release.yml
1name: CI23on: [push]45jobs:6  test:7    name: Test Suite8    runs-on: ubuntu-latest9    steps:10      - name: Checkout sources11        uses: actions/checkout@v212      - name: Install stable toolchain13        uses: actions-rs/toolchain@v114        with:15          toolchain: stable16          override: true17      - name: Run tests18        uses: actions-rs/cargo@v119        with:20          command: test21          args: --all2223  cargo-release:24    if: startsWith(github.ref, 'refs/tags/')25    needs: [test]26    runs-on: ubuntu-latest27    steps:28      - name: Checkout sources29        uses: actions/checkout@v230      - name: Install stable toolchain31        uses: actions-rs/toolchain@v132        with:33          toolchain: stable34          override: true35      - name: Install cargo release command36        uses: actions-rs/cargo@v137        with:38          command: install39          args: cargo-release40      - name: Run cargo login41        uses: actions-rs/cargo@v142        with:43          command: login44          args: ${{ secrets.CARGO_TOKEN }}45      - name: Publish crates46        uses: actions-rs/cargo@v147        with:48          command: release49          args: --no-dev-version --skip-push --skip-tag --no-confirm5051  github-release:52    if: startsWith(github.ref, 'refs/tags/')53    needs: [test]54    strategy:55      matrix:56        target:57          # Tier 158          - aarch64-unknown-linux-gnu59          - i686-pc-windows-gnu60          - i686-pc-windows-msvc61          - i686-unknown-linux-gnu62          - x86_64-apple-darwin63          - x86_64-pc-windows-gnu64          - x86_64-pc-windows-msvc65          - x86_64-unknown-linux-gnu6667          # Other68          - x86_64-unknown-linux-musl69        include:70          - target: aarch64-unknown-linux-gnu71            os: ubuntu-latest72            bin: jrsonnet73            name: jrsonnet-linux-gnu-aarch6474          - target: i686-pc-windows-gnu75            os: windows-latest76            bin: jrsonnet.exe77            name: jrsonnet-windows-gnu-i686.exe78          - target: i686-pc-windows-msvc79            os: windows-latest80            bin: jrsonnet.exe81            name: jrsonnet-windows-msvc-i686.exe82          - target: i686-unknown-linux-gnu83            os: ubuntu-latest84            bin: jrsonnet85            name: jrsonnet-linux-gnu-i68686          - target: x86_64-apple-darwin87            os: macOS-latest88            bin: jrsonnet89            name: jrsonnet-darwin-amd6490          - target: x86_64-pc-windows-gnu91            os: windows-latest92            bin: jrsonnet.exe93            name: jrsonnet-windows-gnu-amd64.exe94          - target: x86_64-pc-windows-msvc95            os: windows-latest96            bin: jrsonnet.exe97            name: jrsonnet-windows-msvc-amd64.exe98          - target: x86_64-unknown-linux-gnu99            os: ubuntu-latest100            bin: jrsonnet101            name: jrsonnet-linux-gnu-amd64102103          - target: x86_64-unknown-linux-musl104            os: ubuntu-latest105            bin: jrsonnet106            name: jrsonnet-linux-musl-amd64107    runs-on: ${{ matrix.os }}108    steps:109      - name: Install stable toolchain110        uses: actions-rs/toolchain@v1111        with:112          toolchain: stable113          override: true114          target: ${{ matrix.target }}115116      - name: Checkout117        uses: actions/checkout@v2118119      - name: Linux x86 cross compiler120        if: ${{ matrix.target == 'i686-unknown-linux-gnu' }}121        run: sudo apt install gcc-multilib122123      - name: Windows x86 cross compiler124        if: ${{ matrix.target == 'i686-pc-windows-gnu' }}125        uses: egor-tensin/setup-mingw@v2126        with:127          platform: x86128129      - name: ARM cross compiler130        if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }}131        uses: actions-rs/cargo@v1132        with:133          command: install134          args: cross135136      - name: Run ARM build137        if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }}138        shell: bash139        run: cross --bin=jrsonnet --release --target ${{ matrix.target }}140141      - name: Run build142        if: ${{ matrix.target != 'aarch64-unknown-linux-gnu' }}143        uses: actions-rs/cargo@v1144        with:145          command: build146          args: --bin=jrsonnet --release --target ${{ matrix.target }}147148      - name: Package149        shell: bash150        run: |151          strip target/${{ matrix.target }}/release/${{ matrix.bin }}152          cd target/${{ matrix.target }}/release153154          cp ${{ matrix.bin }} ../../../${{ matrix.name }}155          cd -156157      - name: Generate SHA-256158        run: shasum -a 256 ${{ matrix.name }} > ${{ matrix.name }}.sha256159160      - name: Publish161        uses: softprops/action-gh-release@v1162        with:163          draft: true164          files: "jrsonnet*"165        env:166          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs
+++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs
@@ -1,8 +1,8 @@
 use crate::{
 	equals,
 	error::{Error::*, Result},
-	parse_args, primitive_equals, push, throw, with_state, ArrValue, Context, FuncVal, LazyVal,
-	Val,
+	parse_args, primitive_equals, push, throw, with_state, ArrValue, Context, EvaluationState,
+	FuncVal, LazyVal, Val,
 };
 use format::{format_arr, format_obj};
 use jrsonnet_interner::IStr;
@@ -74,6 +74,7 @@
 			("reverse".into(), builtin_reverse),
 			("id".into(), builtin_id),
 			("strReplace".into(), builtin_str_replace),
+			("parseJson".into(), builtin_parse_json),
 		].iter().cloned().collect()
 	};
 }
@@ -164,6 +165,20 @@
 	})
 }
 
+fn builtin_parse_json(
+	context: Context,
+	_loc: Option<&ExprLocation>,
+	args: &ArgsDesc,
+) -> Result<Val> {
+	parse_args!(context, "parseJson", args, 1, [
+		0, s: ty!(string) => Val::Str;
+	], {
+		let state = EvaluationState::default();
+		let path = Rc::new(PathBuf::from("std.parseJson"));
+		state.evaluate_snippet_raw(path ,s)
+	})
+}
+
 // faster
 fn builtin_slice(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
 	parse_args!(context, "slice", args, 4, [
modifiedcrates/jrsonnet-evaluator/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/lib.rs
+++ b/crates/jrsonnet-evaluator/src/lib.rs
@@ -809,6 +809,21 @@
 	}
 
 	#[test]
+	fn parse_json() {
+		assert_json!(
+			r#"std.parseJson('{"a": -1,"b": 1,"c": 3.141,"d": []}')"#,
+			r#"{"a": -1,"b": 1,"c": 3.141,"d": []}"#
+		);
+		// TODO: this should in fact fail as is no proper JSON syntax
+		assert_json!(
+			r#"std.parseJson("{a:-1, b:1, c:3.141, d:[]}")"#,
+			r#"{"a": -1,"b": 1,"c": 3.141,"d": []}"#
+		);
+		// TODO: this is also no valid JSON
+		assert_json!(r#"std.parseJson('local x = 2; x * x')"#, r#"4"#);
+	}
+
+	#[test]
 	fn test() {
 		assert_json!(
 			r#"[[a, b] for a in [1,2,3] for b in [4,5,6]]"#,