diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index e7455f7..f0bed11 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -22,6 +22,35 @@ jobs: with: fetch-depth: 0 + - name: Pre-bump providers if resolver changed since last tag + shell: bash + run: | + set -euo pipefail + LAST_TAG=$(git tag --list 'confidence_resolver-v*' | sort -V | tail -n1 || true) + CHANGED=true + if [ -n "${LAST_TAG:-}" ]; then + if git diff --quiet "${LAST_TAG}"..HEAD -- confidence-resolver; then + CHANGED=false + fi + fi + if [ "$CHANGED" = true ]; then + mkdir -p openfeature-provider/js openfeature-provider/java + SHA=$(git rev-parse --short HEAD) + echo "$SHA" > openfeature-provider/js/CONFIDENCE_RESOLVER_ADOPTED_SHA + echo "$SHA" > openfeature-provider/java/CONFIDENCE_RESOLVER_ADOPTED_SHA + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add openfeature-provider/js/CONFIDENCE_RESOLVER_ADOPTED_SHA openfeature-provider/java/CONFIDENCE_RESOLVER_ADOPTED_SHA + if git diff --cached --quiet; then + echo "No provider marker changes to commit" + else + git commit -m "fix: adopt latest confidence-resolver changes" + git push + fi + else + echo "confidence-resolver unchanged since last tag; skipping provider bump" + fi + - name: Release Please (manifest) id: release uses: googleapis/release-please-action@v4 @@ -34,6 +63,8 @@ jobs: needs: release if: ${{ needs.release.outputs.releases_created == 'true' }} runs-on: ubuntu-latest + outputs: + resolver_version: ${{ steps.extract_version.outputs.resolver_version }} permissions: contents: write packages: read @@ -57,6 +88,7 @@ jobs: VERSION=$(grep -m1 '^version\s*=\s*"' confidence-resolver/Cargo.toml | sed -E 's/.*"([^"]+)".*/\1/') echo "VERSION=$VERSION" >> $GITHUB_ENV echo "TAG_NAME=confidence_resolver-v$VERSION" >> $GITHUB_ENV + echo "resolver_version=$VERSION" >> $GITHUB_OUTPUT - name: Build and extract WASM artifact uses: docker/build-push-action@v6 @@ -127,3 +159,47 @@ jobs: platforms: linux/amd64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + + providers-smoke-build: + needs: [release, publish-wasm] + if: ${{ needs.release.outputs.releases_created == 'true' }} + runs-on: ubuntu-latest + permissions: + contents: write + env: + CONFIDENCE_RESOLVER_VERSION: ${{ needs.publish-wasm.outputs.resolver_version }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Pin resolver version in JS package.json + run: | + jq ".confidenceResolverVersion=\"${{ needs.publish-wasm.outputs.resolver_version }}\"" openfeature-provider/js/package.json > openfeature-provider/js/package.json.tmp + mv openfeature-provider/js/package.json.tmp openfeature-provider/js/package.json + + - name: Pin resolver version in Java pom.xml + run: | + sed -i.bak "s#.*#${{ needs.publish-wasm.outputs.resolver_version }}#" openfeature-provider/java/pom.xml + rm -f openfeature-provider/java/pom.xml.bak + + - name: Commit resolver version pins + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add openfeature-provider/js/package.json openfeature-provider/java/pom.xml + if git diff --cached --quiet; then + echo "No resolver version pin changes" + else + git commit -m "fix: pin providers to confidence-resolver v${{ needs.publish-wasm.outputs.resolver_version }}" + git push + fi + + - name: JS provider build (fetch released wasm) + run: make -C openfeature-provider/js build + + - name: Java provider build (fetch released wasm) + run: make -C openfeature-provider/java build + diff --git a/.release-please-manifest.json b/.release-please-manifest.json index c1d07a0..2b23a25 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{"confidence-resolver":"0.5.2","confidence-cloudflare-resolver":"0.2.7","wasm-msg":"0.2.0","wasm/rust-guest":"0.1.8","openfeature-provider-local-java":"0.6.4"} +{"confidence-resolver":"0.5.2","confidence-cloudflare-resolver":"0.2.7","wasm-msg":"0.2.0","wasm/rust-guest":"0.1.8","openfeature-provider/java":"0.6.4","openfeature-provider/js":"0.0.1"} diff --git a/openfeature-provider/java/Makefile b/openfeature-provider/java/Makefile index a911b17..b1685e4 100644 --- a/openfeature-provider/java/Makefile +++ b/openfeature-provider/java/Makefile @@ -5,6 +5,7 @@ ROOT := $(realpath $(CURDIR)/../..) # Stamps and inputs BUILD_STAMP := .build.stamp +INSTALL_STAMP := .install.stamp SRC := $(shell find src -name '*.java' 2>/dev/null) RESOURCES_WASM := src/main/resources/wasm/confidence_resolver.wasm LOCAL_WASM := $(ROOT)/wasm/confidence_resolver.wasm @@ -19,13 +20,33 @@ build-wasm: $(BUILD_STAMP): | build-wasm endif -$(RESOURCES_WASM): $(LOCAL_WASM) +ifneq ($(IN_DOCKER_BUILD),1) +$(RESOURCES_WASM): + @mkdir -p $(dir $@) + cp $(LOCAL_WASM) $@ +else +# In Docker, copy the pre-staged WASM into resources +$(RESOURCES_WASM): @mkdir -p $(dir $@) - @cp -p $(LOCAL_WASM) $@ + @test -f $(LOCAL_WASM) || (echo "Missing $(LOCAL_WASM) (expected via Docker COPY)"; exit 1) + cp $(LOCAL_WASM) $@ +endif + +# A lightweight install target to prep resources +$(INSTALL_STAMP): pom.xml $(RESOURCES_WASM) + touch $@ + + +$(BUILD_STAMP): $(INSTALL_STAMP) pom.xml $(SRC) + mvn -q -DskipTests protobuf:compile + @if [ -f "$(GEN_MESSAGES)" ]; then \ + mkdir -p src/main/java/com/spotify/confidence/wasm; \ + cp $(GEN_MESSAGES) src/main/java/com/spotify/confidence/wasm/Messages.java; \ + fi + mvn -q -DskipTests package + touch $@ -$(BUILD_STAMP): pom.xml $(RESOURCES_WASM) $(SRC) - mvn package -DskipTests - @touch $@ +install: $(INSTALL_STAMP) build: $(BUILD_STAMP) @@ -35,6 +56,7 @@ test: $(BUILD_STAMP) clean: mvn -q clean rm -f $(BUILD_STAMP) + rm -f $(INSTALL_STAMP) rm -f $(RESOURCES_WASM) diff --git a/openfeature-provider/java/pom.xml b/openfeature-provider/java/pom.xml index 75c4f0f..8981b3d 100644 --- a/openfeature-provider/java/pom.xml +++ b/openfeature-provider/java/pom.xml @@ -4,7 +4,7 @@ com.spotify.confidence openfeature-provider-local - 0.0.0-SNAPSHOT + 0.6.5-SNAPSHOT Confidence local resolve provider @@ -13,6 +13,7 @@ 17 17 + 0.5.2 3.25.3 1.63.0 2.0.13 @@ -185,6 +186,16 @@ + + org.apache.maven.plugins + maven-resources-plugin + 3.3.1 + + + src/main/filters/confidence.properties + + + org.xolstice.maven.plugins diff --git a/openfeature-provider/java/src/main/filters/confidence.properties b/openfeature-provider/java/src/main/filters/confidence.properties new file mode 100644 index 0000000..42a0106 --- /dev/null +++ b/openfeature-provider/java/src/main/filters/confidence.properties @@ -0,0 +1 @@ +confidence.resolver.version=${confidence.resolver.version} diff --git a/openfeature-provider/js/Makefile b/openfeature-provider/js/Makefile index cb3ba3c..230ce75 100644 --- a/openfeature-provider/js/Makefile +++ b/openfeature-provider/js/Makefile @@ -23,6 +23,23 @@ build-wasm: $(BUILD_STAMP): | build-wasm endif +$(WASM_ARTIFACT): + @mkdir -p $(dir $@) + @if [ -n "$$CONFIDENCE_RESOLVER_VERSION" ]; then \ + REPO="$$CONFIDENCE_RESOLVER_REPO"; \ + if [ -z "$$REPO" ]; then REPO="$$GITHUB_REPOSITORY"; fi; \ + if [ -z "$$REPO" ]; then REPO=$(shell git config --get remote.origin.url | sed -E 's#.*[:/]([^/]+/[^/]+?)(\\.git)?$#\\1#'); fi; \ + URL="https://github.com/$$REPO/releases/download/confidence_resolver-v$$CONFIDENCE_RESOLVER_VERSION/confidence_resolver.wasm"; \ + echo "Downloading WASM from $$URL"; \ + if [ -n "$$GITHUB_TOKEN" ]; then \ + curl -fsSL -H "Authorization: Bearer $$GITHUB_TOKEN" -o $@ "$$URL"; \ + else \ + curl -fsSL -o $@ "$$URL"; \ + fi; \ + else \ + $(MAKE) -C $(ROOT) wasm/confidence_resolver.wasm; \ + fi + # Install dependencies only when package manifests change $(INSTALL_STAMP): package.json yarn.lock yarn install --immutable diff --git a/openfeature-provider/js/package.json b/openfeature-provider/js/package.json index 744581e..68cd6ef 100644 --- a/openfeature-provider/js/package.json +++ b/openfeature-provider/js/package.json @@ -1,6 +1,7 @@ { "name": "@spotify-confidence/openfeature-server-provider-local", - "version": "0.0.0", + "version": "0.0.1", + "confidenceResolverVersion": "0.5.2", "private": true, "description": "Spotify Confidence Open Feature provider", "type": "module", diff --git a/release-please-config.json b/release-please-config.json index d5ac4d4..ba0c212 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -2,6 +2,7 @@ "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", "bump-minor-pre-major": true, "plugins": ["cargo-workspace"], + "separate-pull-requests": false, "packages": { "confidence-resolver": { "path": "confidence-resolver", @@ -27,10 +28,15 @@ "changelog-path": "CHANGELOG.md", "initial-version": "0.1.0" }, - "openfeature-provider-local-java": { + "openfeature-provider/java": { "path": "openfeature-provider/java", "release-type": "java", "changelog-path": "CHANGELOG.md" + }, + "openfeature-provider/js": { + "path": "openfeature-provider/js", + "release-type": "node", + "changelog-path": "CHANGELOG.md" } } }