diff --git a/.github/workflows/docs-diff.yml b/.github/workflows/docs-diff.yml index ca5f3224a1..8b51e50726 100644 --- a/.github/workflows/docs-diff.yml +++ b/.github/workflows/docs-diff.yml @@ -49,7 +49,6 @@ jobs: uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: '2.7' working-directory: "languages/ruby" if: steps.cache.outputs.cache-hit != 'true' - name: Install yard @@ -84,7 +83,7 @@ jobs: - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: - hugo-version: '0.79.1' + hugo-version: "0.79.1" if: steps.cache.outputs.cache-hit != 'true' - name: Build Hugo docs env: @@ -136,7 +135,7 @@ jobs: uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: '2.7' + ruby-version: "2.7" working-directory: "languages/ruby" if: steps.cache.outputs.cache-hit != 'true' - name: Install yard @@ -171,7 +170,7 @@ jobs: - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: - hugo-version: '0.79.1' + hugo-version: "0.79.1" if: steps.cache.outputs.cache-hit != 'true' - name: Build Hugo docs env: diff --git a/.github/workflows/docs-preview.yml b/.github/workflows/docs-preview.yml index 43683c90e1..d38a0a517d 100644 --- a/.github/workflows/docs-preview.yml +++ b/.github/workflows/docs-preview.yml @@ -31,7 +31,6 @@ jobs: uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: '2.7' working-directory: "languages/ruby" - name: Install yard run: gem install yard @@ -61,7 +60,7 @@ jobs: - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: - hugo-version: '0.79.1' + hugo-version: "0.79.1" - name: Get branch name (branch) if: github.event_name != 'pull_request' shell: bash diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index 627e37eb68..55191c3e24 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -6,7 +6,7 @@ on: description: "docs s3 path (docs.oso.dev or docs-preview.oso.dev)" oso_version: description: "oso release to build docs for" - default: "0.27.2" # oso_version + default: "0.27.3" # oso_version flask_oso_version: description: "flask oso release to build docs for" default: "0.27.1" # flask_oso_version @@ -49,7 +49,6 @@ jobs: uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: '2.7' working-directory: "languages/ruby" - name: Install yard run: gem install yard diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 70a096d6f0..469d479309 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -108,7 +108,7 @@ jobs: - name: Set up ruby ${{ matrix.ruby-version }} uses: ruby/setup-ruby@v1 with: - ruby-version: "2.7" + ruby-version: "3.2" working-directory: "languages/ruby" - run: gem push oso-oso-${{ github.event.inputs.version }}.gem working-directory: "oso-ruby-${{ github.event.inputs.version }}" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 121c3abc74..7aef37a53d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,31 +55,42 @@ jobs: profile: minimal toolchain: 1.69.0 override: true - - name: Build release libraries - run: cargo build --release -p polar-c-api - - name: Build x86_64 release musl library - run: | - rustup target add x86_64-unknown-linux-musl - RUSTFLAGS="-C target-feature=-crt-static" cargo build --target x86_64-unknown-linux-musl --release -p polar-c-api - - name: Download cross + - name: Install cross env: GH_TOKEN: ${{ github.token }} - run: gh release download --repo cross-rs/cross --pattern 'cross-x86_64-unknown-linux-gnu\.tar\.gz' + run: | + gh release download --repo cross-rs/cross --pattern 'cross-x86_64-unknown-linux-gnu\.tar\.gz' + tar -xzvf cross-x86_64-unknown-linux-gnu.tar.gz + - name: Build aarch64 dynamic lib + run: | + rustup target add aarch64-unknown-linux-gnu + RUSTFLAGS="-C target-feature=-crt-static" ./cross build --target aarch64-unknown-linux-gnu --release -p polar-c-api - name: Build aarch64 release musl library run: | rustup target add aarch64-unknown-linux-musl - tar -xzvf cross-x86_64-unknown-linux-gnu.tar.gz RUSTFLAGS="-C target-feature=-crt-static" ./cross build --target aarch64-unknown-linux-musl --release -p polar-c-api + - name: Build x86_64 release libraries + run: cargo build --release -p polar-c-api + - name: Build x86_64 release musl library + run: | + rustup target add x86_64-unknown-linux-musl + RUSTFLAGS="-C target-feature=-crt-static" cargo build --target x86_64-unknown-linux-musl --release -p polar-c-api - name: Rename static lib run: mv target/release/libpolar.a target/libpolar-${{runner.os}}.a - name: Rename x86_64 static lib run: mv target/x86_64-unknown-linux-musl/release/libpolar.a target/libpolar-musl-x86_64.a - name: Rename aarch64 static lib run: mv target/aarch64-unknown-linux-musl/release/libpolar.a target/libpolar-musl-aarch64.a + - name: Rename x86_64 dynamic lib + run: mv target/release/libpolar.so target/libpolar-x86_64.so + - name: Rename aarch64 dynamic lib + run: mv target/aarch64-unknown-linux-gnu/release/libpolar.so target/libpolar-aarch64.so - uses: actions/upload-artifact@v2 with: name: oso_library - path: target/release/libpolar.so + path: | + target/libpolar-x86_64.so + target/libpolar-aarch64.so - uses: actions/upload-artifact@v2 with: name: oso_library @@ -252,7 +263,7 @@ jobs: - name: Copy libraries into resources. run: | mkdir -p languages/java/oso/src/main/resources/linux - cp -r oso_library/libpolar.so languages/java/oso/src/main/resources/linux/ + cp -r oso_library/libpolar-x86_64.so languages/java/oso/src/main/resources/linux/libpolar.so mkdir -p languages/java/oso/src/main/resources/macos cp -r oso_library/libpolar-macOS-fat.dylib languages/java/oso/src/main/resources/macos/libpolar.dylib mkdir -p languages/java/oso/src/main/resources/win @@ -280,7 +291,6 @@ jobs: uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: '2.7' working-directory: "languages/ruby" - name: Set version env id: version @@ -292,7 +302,8 @@ jobs: - name: Copy libraries into resources. run: | mkdir -p languages/ruby/ext/oso-oso/lib - cp -r oso_library/libpolar.so languages/ruby/ext/oso-oso/lib/ + cp -r oso_library/libpolar-x86_64.so languages/ruby/ext/oso-oso/lib/ + cp -r oso_library/libpolar-aarch64.so languages/ruby/ext/oso-oso/lib/ cp -r oso_library/libpolar-macOS-fat.dylib languages/ruby/ext/oso-oso/lib/libpolar.dylib cp -r oso_library/polar.dll languages/ruby/ext/oso-oso/lib/ - name: Test @@ -689,7 +700,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-11, windows-2019] - ruby-version: ['2.5', '2.6', '2.7', '3.0', '3.1', '3.2'] + ruby-version: ["2.6", "2.7", "3.0", "3.1", "3.2"] steps: - uses: actions/checkout@v2 - name: Set version env @@ -805,7 +816,7 @@ jobs: uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: '2.7' + ruby-version: "2.7" working-directory: "docs/examples/quickstart/ruby" - name: Use Node.js 12 uses: actions/setup-node@v1 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index be9adf3f10..6c0b9482a5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -57,7 +57,6 @@ jobs: uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: '2.7' working-directory: "languages/ruby" - name: Lint Ruby code working-directory: "languages/ruby" @@ -214,7 +213,6 @@ jobs: uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: '2.7' working-directory: "languages/ruby" - name: Test ruby run: make ruby-test @@ -350,8 +348,8 @@ jobs: - name: Install Ruby + gems uses: ruby/setup-ruby@v1 with: - ruby-version: '2.7' bundler-cache: true + working-directory: "languages/ruby" - name: Use Node.js 18 uses: actions/setup-node@v3 with: @@ -362,6 +360,8 @@ jobs: java-version: "11" - name: Build python lib run: make python-build + - name: Build ruby lib + run: make ruby-build - name: Python test deps run: make -C languages/python/oso test-requirements - name: Build js lib diff --git a/.gitignore b/.gitignore index 7246a61d40..06f06a361b 100644 --- a/.gitignore +++ b/.gitignore @@ -174,7 +174,6 @@ cython_debug/ # Java class files *.class -.ruby-version languages/java/oso/dependency-reduced-pom.xml languages/java/oso/src/main/resources/* diff --git a/Cargo.lock b/Cargo.lock index 7f1588d57b..f2c82bef56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -729,7 +729,7 @@ checksum = "3baf96e39c5359d2eb0dd6ccb42c62b91d9678aa68160d261b9e0ccbf9e9dea9" [[package]] name = "oso" -version = "0.27.2" +version = "0.27.3" dependencies = [ "anyhow", "clap 3.2.23", @@ -753,7 +753,7 @@ dependencies = [ [[package]] name = "oso-derive" -version = "0.27.2" +version = "0.27.3" dependencies = [ "quote", "syn", @@ -867,7 +867,7 @@ dependencies = [ [[package]] name = "polar-c-api" -version = "0.27.2" +version = "0.27.3" dependencies = [ "cbindgen", "polar-core", @@ -877,7 +877,7 @@ dependencies = [ [[package]] name = "polar-core" -version = "0.27.2" +version = "0.27.3" dependencies = [ "criterion", "indoc", @@ -897,7 +897,7 @@ dependencies = [ [[package]] name = "polar-language-server" -version = "0.27.2" +version = "0.27.3" dependencies = [ "console_error_panic_hook", "js-sys", @@ -911,7 +911,7 @@ dependencies = [ [[package]] name = "polar-wasm-api" -version = "0.27.2" +version = "0.27.3" dependencies = [ "console_error_panic_hook", "js-sys", diff --git a/Makefile b/Makefile index 446f9b270b..739d0f78bb 100644 --- a/Makefile +++ b/Makefile @@ -42,6 +42,9 @@ python-django-test: python-build python-django-build python-sqlalchemy-test: python-build $(MAKE) -C languages/python/sqlalchemy-oso test +ruby-build: rust-build + $(MAKE) -C languages/ruby copy_lib + ruby-test: $(MAKE) -C languages/ruby test @@ -55,7 +58,7 @@ java-test: go-test: rust-build $(MAKE) -C languages/go test -docs-test: python-build +docs-test: python-build ruby-build $(MAKE) -C docs test fmt: fmt-java fmt-rust fmt-python fmt-js fmt-go diff --git a/VERSION b/VERSION index 3edc695dce..b38e1e76f5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.27.2 +0.27.3 diff --git a/docs/content/any/project/changelogs/2024-01-12.md b/docs/content/any/project/changelogs/2024-01-12.md new file mode 100644 index 0000000000..382204bdb1 --- /dev/null +++ b/docs/content/any/project/changelogs/2024-01-12.md @@ -0,0 +1,21 @@ +--- +title: Release 2024-01-12 +menuTitle: 2024-01-12 +any: true +description: >- + Changelog for Release 2024-01-12 (0.27.3) containing new features, + bug fixes, and more. +--- + +## `oso` 0.27.3 + +### Ruby + +#### New features + +##### Linux AArch64 support + +You can now run the `oso-oso` gem in AArch64 Linux environments, including in +Docker on Apple silicon. + +Thanks to [`@jdeff`](https://github.com/jdeff) for the contribution! diff --git a/docs/examples/Makefile b/docs/examples/Makefile index 2dea3466b4..dfe2f8eef6 100644 --- a/docs/examples/Makefile +++ b/docs/examples/Makefile @@ -7,7 +7,7 @@ JS_DIR := $(OSO_ROOT)/languages/js RUBY_DIR := $(OSO_ROOT)/languages/ruby # Needed for tests -JAVA_PACKAGE_JAR_PATH := $(JAVA_DIR)/oso/target/oso-0.27.2.jar +JAVA_PACKAGE_JAR_PATH := $(JAVA_DIR)/oso/target/oso-0.27.3.jar # Note: if you are using bundler in a sub-makefile (in a docs test for example), # you need to add `unexport BUNDLE_GEMFILE` to that makefile. Otherwise this diff --git a/languages/java/oso/pom.xml b/languages/java/oso/pom.xml index e6a02d53fb..3a34f9173f 100644 --- a/languages/java/oso/pom.xml +++ b/languages/java/oso/pom.xml @@ -12,7 +12,7 @@ com.osohq oso - 0.27.2 + 0.27.3 diff --git a/languages/js/package.json b/languages/js/package.json index d0a8ca755e..10a6dec7e2 100644 --- a/languages/js/package.json +++ b/languages/js/package.json @@ -1,6 +1,6 @@ { "name": "oso", - "version": "0.27.2", + "version": "0.27.3", "description": "oso authorization library.", "bin": "bin/repl.js", "main": "dist/src/index.js", diff --git a/languages/python/docs/conf.py b/languages/python/docs/conf.py index fd23f3f3c2..aaf97a0610 100644 --- a/languages/python/docs/conf.py +++ b/languages/python/docs/conf.py @@ -42,8 +42,8 @@ project = "oso" copyright = "2020-2021 Oso Security, Inc" author = "oso" -version = "0.27.2" -release = "0.27.2" +version = "0.27.3" +release = "0.27.3" # -- General configuration --------------------------------------------------- diff --git a/languages/python/oso/oso/oso.py b/languages/python/oso/oso/oso.py index e60bba17ac..8f6edc458b 100644 --- a/languages/python/oso/oso/oso.py +++ b/languages/python/oso/oso/oso.py @@ -1,6 +1,6 @@ """Core oso functionality""" -__version__ = "0.27.2" +__version__ = "0.27.3" import os from typing import Any, List, Set, Type diff --git a/languages/ruby/.gitignore b/languages/ruby/.gitignore index ae0efc3a99..7bc09d589e 100644 --- a/languages/ruby/.gitignore +++ b/languages/ruby/.gitignore @@ -11,3 +11,4 @@ vendor # rspec failure tracking .rspec_status +ext diff --git a/languages/ruby/.rubocop.yml b/languages/ruby/.rubocop.yml index c58f59b6f2..8ee21a6b58 100644 --- a/languages/ruby/.rubocop.yml +++ b/languages/ruby/.rubocop.yml @@ -1,10 +1,50 @@ AllCops: - TargetRubyVersion: 2.4 + TargetRubyVersion: 2.6 Exclude: - "**/*~" - "bin/oso" - "vendor/**/*" NewCops: enable + SuggestExtensions: false + Naming/FileName: Exclude: - "lib/oso-oso.rb" + +Layout/EmptyLineBetweenDefs: + Enabled: false +Layout/LineContinuationSpacing: + Enabled: false + +Gemspec/RequireMFA: + Enabled: false +Gemspec/DevelopmentDependencies: + Enabled: false + +Lint/ConstantDefinitionInBlock: + Enabled: false +Lint/SymbolConversion: + Enabled: false +Lint/NonAtomicFileOperation: + Enabled: false +Lint/EmptyBlock: + Enabled: false +Lint/AmbiguousOperatorPrecedence: + Enabled: false + +Style/FetchEnvVar: + Enabled: false +Style/RedundantCurrentDirectoryInPath: + Enabled: false +Style/QuotedSymbols: + Enabled: false +Style/RedundantConstantBase: + Enabled: false +Style/RedundantInitialize: + Enabled: false +Style/CommentAnnotation: + Enabled: false +Style/FileRead: + Enabled: false +Style/HashConversion: + Enabled: false diff --git a/languages/ruby/.ruby-version b/languages/ruby/.ruby-version new file mode 100644 index 0000000000..be94e6f53d --- /dev/null +++ b/languages/ruby/.ruby-version @@ -0,0 +1 @@ +3.2.2 diff --git a/languages/ruby/Gemfile.lock b/languages/ruby/Gemfile.lock index 0456899e06..17278f2993 100644 --- a/languages/ruby/Gemfile.lock +++ b/languages/ruby/Gemfile.lock @@ -1,43 +1,55 @@ PATH remote: . specs: - oso-oso (0.27.2) + oso-oso (0.27.3) ffi (~> 1.0) GEM remote: https://rubygems.org/ specs: - activemodel (5.2.6) - activesupport (= 5.2.6) - activerecord (5.2.6) - activemodel (= 5.2.6) - activesupport (= 5.2.6) - arel (>= 9.0) - activesupport (5.2.6) + activemodel (7.1.2) + activesupport (= 7.1.2) + activerecord (7.1.2) + activemodel (= 7.1.2) + activesupport (= 7.1.2) + timeout (>= 0.4.0) + activesupport (7.1.2) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) - arel (9.0.0) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + minitest (>= 5.1) + mutex_m + tzinfo (~> 2.0) ast (2.4.2) backport (1.2.0) + base64 (0.2.0) benchmark (0.3.0) + bigdecimal (3.1.4) byebug (11.1.3) coderay (1.1.3) - concurrent-ruby (1.1.9) - diff-lcs (1.4.4) + concurrent-ruby (1.2.2) + connection_pool (2.4.1) + diff-lcs (1.5.0) + drb (2.2.0) + ruby2_keywords e2mmap (0.1.0) - ffi (1.15.4) - i18n (1.8.11) + ffi (1.16.3) + i18n (1.14.1) concurrent-ruby (~> 1.0) jaro_winkler (1.5.6) + json (2.7.1) kramdown (2.4.0) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) + language_server-protocol (3.17.0.3) method_source (1.0.0) mini_portile2 (2.8.5) - minitest (5.14.4) + minitest (5.20.0) + mutex_m (0.2.0) nokogiri (1.15.5) mini_portile2 (~> 2.8.2) racc (~> 1.4) @@ -45,68 +57,78 @@ GEM racc (~> 1.4) nokogiri (1.15.5-x86_64-linux) racc (~> 1.4) - parallel (1.20.1) - parser (2.7.2.0) + parallel (1.23.0) + parser (3.2.2.4) ast (~> 2.4.1) - pry (0.13.1) + racc + pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) - pry-byebug (3.9.0) + pry-byebug (3.10.1) byebug (~> 11.0) - pry (~> 0.13.0) + pry (>= 0.13, < 0.15) racc (1.7.3) - rainbow (3.0.0) + rainbow (3.1.1) rake (12.3.3) - regexp_parser (2.1.1) + rbs (2.8.4) + regexp_parser (2.8.3) reverse_markdown (2.1.1) nokogiri - rexml (3.2.5) - rspec (3.10.0) - rspec-core (~> 3.10.0) - rspec-expectations (~> 3.10.0) - rspec-mocks (~> 3.10.0) - rspec-core (3.10.1) - rspec-support (~> 3.10.0) - rspec-expectations (3.10.1) + rexml (3.2.6) + rspec (3.12.0) + rspec-core (~> 3.12.0) + rspec-expectations (~> 3.12.0) + rspec-mocks (~> 3.12.0) + rspec-core (3.12.2) + rspec-support (~> 3.12.0) + rspec-expectations (3.12.3) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) - rspec-mocks (3.10.2) + rspec-support (~> 3.12.0) + rspec-mocks (3.12.6) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) - rspec-support (3.10.3) - rubocop (0.89.1) + rspec-support (~> 3.12.0) + rspec-support (3.12.1) + rubocop (1.58.0) + json (~> 2.3) + language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 2.7.1.1) + parser (>= 3.2.2.4) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.7) - rexml - rubocop-ast (>= 0.3.0, < 1.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.30.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 2.0) - rubocop-ast (0.8.0) - parser (>= 2.7.1.5) - ruby-progressbar (1.11.0) - solargraph (0.40.1) - backport (~> 1.1) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.30.0) + parser (>= 3.2.1.0) + ruby-progressbar (1.13.0) + ruby2_keywords (0.0.5) + solargraph (0.49.0) + backport (~> 1.2) benchmark - bundler (>= 1.17.2) + bundler (~> 2.0) + diff-lcs (~> 1.4) e2mmap jaro_winkler (~> 1.5) kramdown (~> 2.3) kramdown-parser-gfm (~> 1.1) - parser (~> 2.3) - reverse_markdown (>= 1.0.5, < 3) - rubocop (>= 0.52) + parser (~> 3.0) + rbs (~> 2.0) + reverse_markdown (~> 2.0) + rubocop (~> 1.38) thor (~> 1.0) tilt (~> 2.0) yard (~> 0.9, >= 0.9.24) - sqlite3 (1.4.2) + sqlite3 (1.6.9) + mini_portile2 (~> 2.8.0) + sqlite3 (1.6.9-x86_64-darwin) + sqlite3 (1.6.9-x86_64-linux) thor (1.3.0) - thread_safe (0.3.6) tilt (2.3.0) - tzinfo (1.2.9) - thread_safe (~> 0.1) - unicode-display_width (1.8.0) + timeout (0.4.1) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unicode-display_width (2.5.0) yard (0.9.34) PLATFORMS @@ -117,13 +139,13 @@ PLATFORMS DEPENDENCIES activerecord oso-oso! - pry-byebug (~> 3.9.0) + pry-byebug (~> 3.10.1) rake (~> 12.0) rspec (~> 3.0) - rubocop (~> 0.89.1) - solargraph (~> 0.40.0) + rubocop (~> 1.58.0) + solargraph (~> 0.49.0) sqlite3 yard (~> 0.9.25) BUNDLED WITH - 2.2.4 + 2.4.22 diff --git a/languages/ruby/Makefile b/languages/ruby/Makefile index d2e36f7eb9..79c5889d8e 100644 --- a/languages/ruby/Makefile +++ b/languages/ruby/Makefile @@ -1,12 +1,28 @@ -.PHONY: rust install test lint typecheck repl +.PHONY: rust copy_lib install test lint typecheck repl + +UNAME_S := $(shell uname -s) +UNAME_M := $(shell uname -m) rust: $(MAKE) -C ../.. rust-build +copy_lib: + mkdir -p ext/oso-oso/lib/ +ifeq ($(UNAME_S),Linux) +ifeq ($(UNAME_M),x86_64) + cp ../../target/debug/libpolar.so ext/oso-oso/lib/libpolar-x86_64.so +else + cp ../../target/debug/libpolar.so ext/oso-oso/lib/libpolar-aarch64.so +endif +endif +ifeq ($(UNAME_S),Darwin) + cp ../../target/debug/libpolar.dylib ext/oso-oso/lib/ +endif + install: bundle install -test: install rust +test: install rust copy_lib POLAR_IGNORE_NO_ALLOW_WARNING=1 bundle exec rake spec lint: install @@ -15,5 +31,5 @@ lint: install typecheck: install bundle exec solargraph typecheck -repl: install rust +repl: install rust copy_lib bundle exec oso diff --git a/languages/ruby/lib/oso/polar/ffi.rb b/languages/ruby/lib/oso/polar/ffi.rb index e4a52d4a46..23e0abd07d 100644 --- a/languages/ruby/lib/oso/polar/ffi.rb +++ b/languages/ruby/lib/oso/polar/ffi.rb @@ -6,12 +6,17 @@ module Oso module Polar # FFI classes shared between all ffi/*.rb modules module FFI - LIB = "#{::FFI::Platform::LIBPREFIX}polar.#{::FFI::Platform::LIBSUFFIX}" - RELEASE_PATH = File.expand_path(File.join(__dir__, "../../../ext/oso-oso/lib/#{LIB}")) - DEV_PATH = File.expand_path(File.join(__dir__, "../../../../../target/debug/#{LIB}")) - # If the lib exists in the ext/ dir, use it. Otherwise, fall back to - # checking the local Rust target dir. - LIB_PATH = File.file?(RELEASE_PATH) ? RELEASE_PATH : DEV_PATH + LIB = + case ::FFI::Platform::OS + when /darwin/ + 'libpolar.dylib' + when /windows|cygwin|msys/ + 'polar.dll' + else + "libpolar-#{::FFI::Platform::ARCH}.so" + end + + LIB_PATH = File.expand_path(File.join(__dir__, "../../../ext/oso-oso/lib/#{LIB}")) # Wrapper classes defined upfront to fix Ruby loading issues. Actual # implementations live in the sibling `ffi/` directory and are `require`d diff --git a/languages/ruby/lib/oso/polar/polar.rb b/languages/ruby/lib/oso/polar/polar.rb index 5aa87095b3..0006286d28 100644 --- a/languages/ruby/lib/oso/polar/polar.rb +++ b/languages/ruby/lib/oso/polar/polar.rb @@ -153,14 +153,11 @@ def load_str(str, filename: nil) # Query for a Polar predicate or string. # - # @overload query(query) - # @param query [String] - # @return [Enumerator] of resulting bindings - # @raise [Error] if the FFI call raises one. - # @overload query(query) - # @param query [Predicate] - # @return [Enumerator] of resulting bindings - # @raise [Error] if the FFI call raises one. + # @param query [String, Predicate] + # @param host [Host] + # @param bindings [Hash] + # @return [Enumerator] of resulting bindings + # @raise [Error] if the FFI call raises one. def query(query, host: self.host.dup, bindings: {}) case query when String diff --git a/languages/ruby/lib/oso/version.rb b/languages/ruby/lib/oso/version.rb index 64d83b0477..4ac63e09aa 100644 --- a/languages/ruby/lib/oso/version.rb +++ b/languages/ruby/lib/oso/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Oso - VERSION = '0.27.2' + VERSION = '0.27.3' end diff --git a/languages/ruby/oso-oso.gemspec b/languages/ruby/oso-oso.gemspec index e532ad702d..22c2979696 100644 --- a/languages/ruby/oso-oso.gemspec +++ b/languages/ruby/oso-oso.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |spec| 'fixes. More context: [here](https://www.osohq.com/docs/oss/getting-started/deprecation.html).' spec.homepage = 'https://www.osohq.com/' - spec.required_ruby_version = Gem::Requirement.new('>= 2.4.0') + spec.required_ruby_version = Gem::Requirement.new('>= 2.6.10') spec.metadata['homepage_uri'] = spec.homepage spec.metadata['source_code_uri'] = 'https://github.com/osohq/oso' @@ -37,11 +37,11 @@ Gem::Specification.new do |spec| # Development dependencies spec.add_development_dependency 'activerecord' - spec.add_development_dependency 'pry-byebug', '~> 3.9.0' + spec.add_development_dependency 'pry-byebug', '~> 3.10.1' spec.add_development_dependency 'rake', '~> 12.0' spec.add_development_dependency 'rspec', '~> 3.0' - spec.add_development_dependency 'rubocop', '~> 0.89.1' - spec.add_development_dependency 'solargraph', '~> 0.40.0' + spec.add_development_dependency 'rubocop', '~> 1.58.0' + spec.add_development_dependency 'solargraph', '~> 0.49.0' spec.add_development_dependency 'sqlite3' spec.add_development_dependency 'yard', '~> 0.9.25' end diff --git a/languages/ruby/spec/oso/polar/data_filtering/gitclub_spec.rb b/languages/ruby/spec/oso/polar/data_filtering/gitclub_spec.rb index a9577dfd68..d77376bdd1 100644 --- a/languages/ruby/spec/oso/polar/data_filtering/gitclub_spec.rb +++ b/languages/ruby/spec/oso/polar/data_filtering/gitclub_spec.rb @@ -3,6 +3,7 @@ require_relative './helpers' require 'sqlite3' require 'active_record' +require 'oso/polar/data/adapter/active_record_adapter' DB_FILE = 'gitclub_test.db' RSpec.describe Oso::Oso do # rubocop:disable Metrics/BlockLength diff --git a/languages/rust/oso-derive/Cargo.toml b/languages/rust/oso-derive/Cargo.toml index 381028ec52..047f43d59f 100644 --- a/languages/rust/oso-derive/Cargo.toml +++ b/languages/rust/oso-derive/Cargo.toml @@ -7,7 +7,7 @@ repository = "https://github.com/osohq/oso" homepage = "https://www.osohq.com/" readme = "README.md" -version = "0.27.2" +version = "0.27.3" edition = "2021" diff --git a/languages/rust/oso/Cargo.toml b/languages/rust/oso/Cargo.toml index d06f31c2e1..be7b4a5352 100644 --- a/languages/rust/oso/Cargo.toml +++ b/languages/rust/oso/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "oso" readme = "README.md" -version = "0.27.2" +version = "0.27.3" edition = "2021" @@ -31,8 +31,8 @@ required-features = ["anyhow"] [dependencies] impl-trait-for-tuples = "0.2.1" maplit = "1.0.2" -oso-derive = { path = "../oso-derive", version = "=0.27.2", optional = true } -polar-core = { path = "../../../polar-core", version = "=0.27.2" } +oso-derive = { path = "../oso-derive", version = "=0.27.3", optional = true } +polar-core = { path = "../../../polar-core", version = "=0.27.3" } thiserror = "1.0.30" tracing = { version = "0.1.29", features = ["log"] } @@ -52,7 +52,7 @@ uuid-10 = { package = "uuid", version = ">=1.0.0, <2.0.0", optional = true } [dev-dependencies] anyhow = "1.0.44" criterion = { version = "0.3.5", default-features = false } -oso-derive = { path = "../oso-derive", version = "=0.27.2" } +oso-derive = { path = "../oso-derive", version = "=0.27.3" } static_assertions = "1.1.0" tempfile = "3.2.0" tracing-subscriber = { version = "0.3.1", default-features = false, features = [ diff --git a/languages/rust/oso/tests/test_polar.rs b/languages/rust/oso/tests/test_polar.rs index 598820bc00..da367df9cc 100644 --- a/languages/rust/oso/tests/test_polar.rs +++ b/languages/rust/oso/tests/test_polar.rs @@ -119,7 +119,7 @@ fn test_data_conversions_polar_values() -> oso::Result<()> { // TODO (dhatch): Type handling: Would be great to be able to get each index // out here dynamically, the same way we can with result set. if let PolarValue::List(x_vec) = v_x { - assert_eq!(i64::from_polar(x_vec.get(0).unwrap().to_owned())?, 1); + assert_eq!(i64::from_polar(x_vec.first().unwrap().to_owned())?, 1); assert_eq!( String::from_polar(x_vec.get(1).unwrap().to_owned())?, String::from("two") @@ -328,7 +328,7 @@ fn test_basic_queries() { assert_eq!(results.len(), 1); assert!(results - .get(0) + .first() .map(|r| r.keys().next().is_none()) .unwrap_or_default()); } diff --git a/polar-c-api/Cargo.toml b/polar-c-api/Cargo.toml index 6821d1b493..57f17bc130 100644 --- a/polar-c-api/Cargo.toml +++ b/polar-c-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polar-c-api" -version = "0.27.2" +version = "0.27.3" authors = ["Oso Security, Inc. "] edition = "2021" @@ -10,7 +10,7 @@ crate-type = ["lib", "staticlib", "cdylib"] bench = false [dependencies] -polar-core = { path = "../polar-core", version = "=0.27.2" } +polar-core = { path = "../polar-core", version = "=0.27.3" } serde = "1.0" serde_json = "1.0.61" diff --git a/polar-core/Cargo.toml b/polar-core/Cargo.toml index e8e34479fe..6719a8e6bd 100644 --- a/polar-core/Cargo.toml +++ b/polar-core/Cargo.toml @@ -7,7 +7,7 @@ repository = "https://github.com/osohq/oso" homepage = "https://www.osohq.com/" readme = "README.md" -version = "0.27.2" +version = "0.27.3" edition = "2021" diff --git a/polar-language-server/Cargo.toml b/polar-language-server/Cargo.toml index f1dc2066c1..e74ac3306f 100644 --- a/polar-language-server/Cargo.toml +++ b/polar-language-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polar-language-server" -version = "0.27.2" +version = "0.27.3" authors = ["Oso Security, Inc. "] edition = "2021" @@ -12,7 +12,7 @@ bench = false console_error_panic_hook = "0.1.6" js-sys = "0.3.53" lsp-types = "0.90.0" -polar-core = { path = "../polar-core", version = "=0.27.2" } +polar-core = { path = "../polar-core", version = "=0.27.3" } serde = { version = "1.0", features = ["derive"] } serde-wasm-bindgen = "0.3.1" wasm-bindgen = "0.2.76" diff --git a/polar-language-server/src/lib.rs b/polar-language-server/src/lib.rs index 7c90cb2289..fda02c1c4e 100644 --- a/polar-language-server/src/lib.rs +++ b/polar-language-server/src/lib.rs @@ -604,7 +604,7 @@ mod tests { assert_eq!(params.uri, doc.uri); assert_eq!(params.version.unwrap(), doc.version); assert_eq!(params.diagnostics.len(), 1, "{}", doc.uri); - let diagnostic = params.diagnostics.get(0).unwrap(); + let diagnostic = params.diagnostics.first().unwrap(); assert_eq!( diagnostic.message, "hit the end of the file unexpectedly. Did you forget a semi-colon" @@ -629,7 +629,7 @@ mod tests { assert_eq!(params.uri, doc.uri); assert_eq!(params.version.unwrap(), doc.version); assert_eq!(params.diagnostics.len(), 1, "{}", doc.uri); - let diagnostic = params.diagnostics.get(0).unwrap(); + let diagnostic = params.diagnostics.first().unwrap(); let expected = diagnostic .message .starts_with("Your policy does not contain an allow rule"); @@ -892,7 +892,7 @@ mod tests { // `load_documents()` API performs no filtering. let polar_diagnostics = pls.load_documents(); assert_eq!(polar_diagnostics.len(), 2, "{:?}", polar_diagnostics); - let unknown_specializer = polar_diagnostics.get(0).unwrap(); + let unknown_specializer = polar_diagnostics.first().unwrap(); let expected_message = "Unknown specializer String at line 3, column 41 of file file:///whatever.polar:\n\t003: has_permission(_: Actor, _: String, _: Resource);\n\t ^\n"; assert_eq!(unknown_specializer.to_string(), expected_message); let unregistered_class = polar_diagnostics.get(1).unwrap(); @@ -918,7 +918,7 @@ mod tests { // `load_documents()` API performs no filtering. let polar_diagnostics = pls.load_documents(); assert_eq!(polar_diagnostics.len(), 2, "{:?}", polar_diagnostics); - let unknown_specializer = polar_diagnostics.get(0).unwrap(); + let unknown_specializer = polar_diagnostics.first().unwrap(); let expected_message = "Unknown specializer B at line 4, column 18 of file file:///whatever.polar:\n\t004: f(_: B);\n\t ^\n"; assert_eq!(unknown_specializer.to_string(), expected_message); let unregistered_constant = polar_diagnostics.get(1).unwrap(); @@ -939,7 +939,7 @@ mod tests { // `load_documents()` API performs no filtering. let polar_diagnostics = pls.load_documents(); assert_eq!(polar_diagnostics.len(), 1, "{:?}", polar_diagnostics); - let singleton_variable = polar_diagnostics.get(0).unwrap(); + let singleton_variable = polar_diagnostics.first().unwrap(); assert!(singleton_variable .to_string() .starts_with("Singleton variable a is unused or undefined; try renaming to _a or _")); @@ -963,7 +963,7 @@ mod tests { assert_eq!(params.uri, doc.uri); assert_eq!(params.version.unwrap(), doc.version); assert_eq!(params.diagnostics.len(), 1); - let diagnostic = params.diagnostics.get(0).unwrap(); + let diagnostic = params.diagnostics.first().unwrap(); assert_eq!( diagnostic.message, "debug is a reserved Polar word and cannot be used here" @@ -989,7 +989,7 @@ mod tests { assert_eq!(params.uri, doc.uri); assert_eq!(params.version.unwrap(), doc.version); assert_eq!(params.diagnostics.len(), 1, "{:?}", params.diagnostics); - let undeclared_term = ¶ms.diagnostics.get(0).unwrap().message; + let undeclared_term = ¶ms.diagnostics.first().unwrap().message; assert!( undeclared_term.starts_with("Undeclared term \"read\""), "{}", @@ -1016,7 +1016,7 @@ mod tests { assert_eq!(params.uri, doc2.uri); assert_eq!(params.version.unwrap(), doc2.version); assert_eq!(params.diagnostics.len(), 1, "{:?}", params.diagnostics); - let undeclared_term = ¶ms.diagnostics.get(0).unwrap().message; + let undeclared_term = ¶ms.diagnostics.first().unwrap().message; assert_eq!( undeclared_term, &format!("Problem loading file: A file with the same contents as {} named {} has already been loaded.", doc2.uri, doc1.uri), diff --git a/polar-wasm-api/Cargo.toml b/polar-wasm-api/Cargo.toml index e114bc0e5a..3ff88086e6 100644 --- a/polar-wasm-api/Cargo.toml +++ b/polar-wasm-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polar-wasm-api" -version = "0.27.2" +version = "0.27.3" authors = ["Oso Security, Inc. "] edition = "2021" @@ -11,7 +11,7 @@ bench = false [dependencies] console_error_panic_hook = "0.1.6" js-sys = "0.3.53" -polar-core = { path = "../polar-core", version = "=0.27.2" } +polar-core = { path = "../polar-core", version = "=0.27.3" } serde = { version = "1.0.119", features = ["rc"] } serde-wasm-bindgen = "0.3.1" wasm-bindgen = "0.2.76" diff --git a/vscode/oso/package.json b/vscode/oso/package.json index a1b7839661..a112052259 100644 --- a/vscode/oso/package.json +++ b/vscode/oso/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "0.27.2", + "version": "0.27.3", "name": "oso", "displayName": "Oso", "author": "Oso Security Inc.",