Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .github/workflows/check-ts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
concurrency:
group: "${{ github.workflow }}-${{ github.ref }}-check-ts"
cancel-in-progress: true

on:
workflow_call:
workflow_dispatch:

env:
RELEASE: 1

jobs:
check:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: download web files
uses: ./.github/actions/make/ts/browser
with:
gh-token: ${{ secrets.GITHUB_TOKEN }}
artifact-generation: ${{ vars.ARTIFACT_GENERATION }}

- name: download native files
uses: ./.github/actions/make/ts/native
with:
gh-token: ${{ secrets.GITHUB_TOKEN }}
artifact-generation: ${{ vars.ARTIFACT_GENERATION }}

- name: lint
run: make ts-check
14 changes: 12 additions & 2 deletions .github/workflows/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -192,11 +192,21 @@ jobs:
gh-token: ${{ secrets.GITHUB_TOKEN }}
artifact-generation: ${{ vars.ARTIFACT_GENERATION }}

test-ts:
test-ts-browser:
needs:
- bindings-ts-browser
uses: ./.github/workflows/test-ts-browser.yml

test-ts-native:
needs:
- bindings-ts-native
uses: ./.github/workflows/test-ts-native.yml

check-ts:
needs:
- bindings-ts-browser
- bindings-ts-native
uses: ./.github/workflows/test-ts.yml
uses: ./.github/workflows/check-ts.yml

docs-ts:
needs:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
concurrency:
group: "${{ github.workflow }}-${{ github.ref }}-test-ts"
group: "${{ github.workflow }}-${{ github.ref }}-test-ts-browser"
cancel-in-progress: true

on:
Expand All @@ -10,11 +10,12 @@ env:
RELEASE: 1

jobs:
test-ts:
test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6

- uses: wireapp/setup-chrome@master
id: setup-chrome
with:
Expand All @@ -29,20 +30,11 @@ jobs:
gh-token: ${{ secrets.GITHUB_TOKEN }}
artifact-generation: ${{ vars.ARTIFACT_GENERATION }}

- name: download native files
uses: ./.github/actions/make/ts/native
with:
gh-token: ${{ secrets.GITHUB_TOKEN }}
artifact-generation: ${{ vars.ARTIFACT_GENERATION }}

- name: lint
run: make ts-check

- name: test
uses: ./.github/actions/make
with:
key: ts-test
make-rule: ts-test
key: ts-browser-test
make-rule: ts-browser-test
always-run: ${{ github.event_name == 'workflow_dispatch' || github.ref_name == 'main' }}
gh-token: ${{ secrets.GITHUB_TOKEN }}
artifact-generation: ${{ vars.ARTIFACT_GENERATION }}
35 changes: 35 additions & 0 deletions .github/workflows/test-ts-native.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
concurrency:
group: "${{ github.workflow }}-${{ github.ref }}-test-ts-native"
cancel-in-progress: true

on:
workflow_call:
workflow_dispatch:

env:
RELEASE: 1

jobs:
test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: download native files
uses: ./.github/actions/make/ts/native
with:
gh-token: ${{ secrets.GITHUB_TOKEN }}
artifact-generation: ${{ vars.ARTIFACT_GENERATION }}

- name: test
uses: ./.github/actions/make
with:
key: ts-native-test
make-rule: ts-native-test
always-run: ${{ github.event_name == 'workflow_dispatch' || github.ref_name == 'main' }}
gh-token: ${{ secrets.GITHUB_TOKEN }}
artifact-generation: ${{ vars.ARTIFACT_GENERATION }}
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ crypto-ffi/bindings/android/src/main/kotlin/com/wire/crypto/CoreCrypto.kt
crypto-ffi/bindings/android/src/main/kotlin/uniffi/core_crypto/core_crypto.kt

#UBRN
crypto-ffi/bindings/js/rust_modules/wasm
crypto-ffi/bindings/js/rust_modules
crypto-ffi/bindings/js/src/browser/index.web.ts
crypto-ffi/bindings/js/src/browser/autogenerated
crypto-ffi/bindings/js/src/native/autogenerated
Expand Down
50 changes: 38 additions & 12 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,9 @@ BROWSER_GEN_DIR := $(BROWSER_SRC_DIR)/autogenerated
TS_NATIVE_GEN_DIR := $(TS_NATIVE_SRC_DIR)/autogenerated

# find all .ts source files under src/ except `*.d.ts`
TS_SRCS := $(shell find $(JS_SRC_DIR) -type f -name '*.ts' -not -name '*.d.ts' -not -path '*autogenerated*' 2>/dev/null | LC_ALL=C sort)
TS_NATIVE_SRCS := $(shell find $(JS_SRC_DIR)/native -type f -name '*.ts' -not -name '*.d.ts' -not -path '*autogenerated*' 2>/dev/null | LC_ALL=C sort)
TS_BROWSER_SRCS := $(shell find $(JS_SRC_DIR)/browser -type f -name '*.ts' -not -name '*.d.ts' -not -path '*autogenerated*' 2>/dev/null | LC_ALL=C sort)
TS_SRCS := $(TS_NATIVE_SRCS) $(TS_BROWSER_SRCS)
TS_OUT_DIR := $(JS_DIR)/out
WASM_TARGET_DIR := target/wasm
WASM_BUILD_ENV := CARGO_TARGET_DIR=$(abspath $(WASM_TARGET_DIR))
Expand Down Expand Up @@ -562,7 +564,7 @@ $(WASM_GEN): $(wasm-build-deps)
wasm-build: $(WASM_GEN)

# generate TypeScript defs only when corecrypto.js changed
ts-browser-deps := $(TS_SRCS) $(WASM_GEN)
ts-browser-deps := $(TS_BROWSER_SRCS) $(WASM_GEN)
$(BROWSER_OUT): $(ts-browser-deps)
cd $(JS_DIR) && \
bun build src/browser/CoreCrypto.ts \
Expand All @@ -585,15 +587,15 @@ $(BROWSER_OUT): $(ts-browser-deps)
.PHONY: ts-browser
ts-browser: $(BROWSER_OUT) ## Build the TypeScript wrapper for the browser

ts-native-deps := $(TS_SRCS) $(RUST_SOURCES) $(BUN_LOCK) $(NODE_MODULES) $(PACKAGE_JSON) $(BUNFIG)
ts-native-deps := $(TS_NATIVE_SRCS) $(RUST_SOURCES) $(BUN_LOCK) $(NODE_MODULES) $(PACKAGE_JSON) $(BUNFIG)
$(TS_NATIVE_OUT): $(ts-native-deps)
cd $(JS_DIR) && \
rm -rf out/native && \
mkdir -p out/native/autogenerated && \
RUSTFLAGS="$(RUSTFLAGS) -Awarnings" bun ubrn generate napi build \
--crate ../../../crypto-ffi/ \
--ts-dir src/native/autogenerated \
--abi-dir src/native/autogenerated/napi \
--abi-dir rust_modules/napi \
--targets $(TS_NATIVE_TARGET_TRIPLE) && \
rm -f out/native/*.node && \
cp src/native/autogenerated/napi-bindings/$(TS_NATIVE_NODE) out/native && \
Expand Down Expand Up @@ -622,21 +624,39 @@ ts-native-linux: ## Build the native TypeScript wrapper for x86_64-unknown-linux
.PHONY: ts-native
ts-native: $(TS_NATIVE_OUT) ## Build the native TypeScript wrapper (automatically select the target based on the host machine)

ts-test-deps := $(BROWSER_OUT) $(TS_NATIVE_OUT) $(TS_TEST_FILES)
ts-browser-test-deps := $(BROWSER_OUT) $(TS_BROWSER_TEST_FILES)

# run WebDriver tests + bun’s built-in tests
$(STAMPS)/ts-test: $(ts-test-deps)
# run browser-oriented TypeScript tests (WebDriver + Bun wasm)
$(STAMPS)/ts-browser-test: $(ts-browser-test-deps)
@set -euo pipefail; \
cd $(JS_DIR) && \
if [ -n "$(TEST)" ]; then \
bun x wdio run ./wdio.test.conf.ts --mochaOpts.grep "$(TEST)"; \
bun test --filter "$(TEST)"; \
bun test --filter "$(TEST)" ./test/bun/wasm; \
else \
bun x wdio run ./wdio.test.conf.ts; \
bun test; \
bun test ./test/bun/wasm; \
fi
$(TOUCH_STAMP)

ts-native-test-deps := $(TS_NATIVE_OUT) $(TS_NATIVE_TEST_FILES)

# run native TypeScript tests (Bun napi)
$(STAMPS)/ts-native-test: $(ts-native-test-deps)
@set -euo pipefail; \
cd $(JS_DIR) && \
if [ -n "$(TEST)" ]; then \
bun test --filter "$(TEST)" ./test/bun/napi; \
else \
bun test ./test/bun/napi; \
fi
$(TOUCH_STAMP)

$(STAMPS)/ts-test:
@$(MAKE) LAZY_MAKE= ts-browser-test TEST="$(TEST)"
@$(MAKE) LAZY_MAKE= ts-native-test TEST="$(TEST)"
$(TOUCH_STAMP)

# run WebDriver benches
.PHONY: ts-bench
ts-bench: $(BROWSER_OUT) ## Run TypeScript wrapper benches in Chrome via wdio
Expand Down Expand Up @@ -821,7 +841,11 @@ $(STAMPS)/kotlin-check: $(KT_FILES) $(KT_GRADLE_FILES)
kotlin-check: $(STAMPS)/kotlin-check ## Lint Kotlin files via ktlint

# TypeScript
TS_TEST_FILES := $(shell find $(JS_DIR)/test -type f -name '*.ts' 2>/dev/null | LC_ALL=C sort)
TS_NATIVE_TEST_FILES := $(shell find $(JS_DIR)/test/bun/napi -type f -name '*.ts' 2>/dev/null | LC_ALL=C sort)
TS_BROWSER_TEST_FILES := $(sort \
$(shell find $(JS_DIR)/test/bun/wasm -type f -name '*.ts' 2>/dev/null | LC_ALL=C sort) \
$(shell find $(JS_DIR)/test/wdio -type f -name '*.ts' 2>/dev/null | LC_ALL=C sort))
TS_TEST_FILES := $(sort $(TS_NATIVE_TEST_FILES) $(TS_BROWSER_TEST_FILES))
TS_BENCH_FILES := $(shell find $(JS_DIR)/benches -type f -name '*.ts' 2>/dev/null | LC_ALL=C sort)

$(STAMPS)/ts-fmt: $(TS_SRCS) $(TS_TEST_FILES) $(TS_BENCH_FILES)
Expand Down Expand Up @@ -849,9 +873,11 @@ check: rust-check swift-check kotlin-check ts-check ## Run all linters
# Lazy targets
#-------------------------------------------------------------------------------

LAZY_TARGETS := jvm-test kmp-jvm-test ts-test android-test ios-test interop-test jvm-bench
LAZY_TARGETS := jvm-test kmp-jvm-test ts-browser-test ts-native-test ts-test android-test ios-test interop-test jvm-bench

ts-test: ## Run TypeScript wrapper tests via wdio and bun. Optionally pass TEST=<test> to filter by test name.
ts-browser-test: ## Run browser TypeScript wrapper tests via wdio and bun/wasm. Optionally pass TEST=<test> to filter by test name.
ts-native-test: ## Run native TypeScript wrapper tests via bun/napi. Optionally pass TEST=<test> to filter by test name.
ts-test: ## Run all TypeScript wrapper tests. Optionally pass TEST=<test> to filter by test name.
kmp-jvm-test: ## Run Kotlin multi-platform tests on JVM
jvm-test: ## Run Kotlin tests on JVM
jvm-bench: ## Run the JVM benchmarks
Expand Down
Loading