From 4b8db0ca10f5a0bccbf2014ca192caa938e820c8 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Thu, 23 Oct 2025 19:12:20 +0530 Subject: [PATCH 1/2] fix!: use 3-number semantic versioning for releases --- .github/actions/bump-manifest-version.ts | 14 +++++------ .github/actions/validate-stable-release.ts | 4 +-- .github/workflows/bump-manifest-version.yml | 3 +-- .github/workflows/release-stable.yml | 2 +- docs/RELEASE.md | 27 ++++++++------------- src/manifest.json | 2 +- src/safari/Web Monetization/Config.xcconfig | 2 +- 7 files changed, 22 insertions(+), 32 deletions(-) diff --git a/.github/actions/bump-manifest-version.ts b/.github/actions/bump-manifest-version.ts index 2acdca92d..bed579c14 100644 --- a/.github/actions/bump-manifest-version.ts +++ b/.github/actions/bump-manifest-version.ts @@ -1,7 +1,7 @@ import type { AsyncFunctionArguments } from 'github-script'; import fs from 'node:fs/promises'; -type BumpType = 'build' | 'patch' | 'minor'; +type BumpType = 'patch' | 'minor'; export default async ({ core }: AsyncFunctionArguments) => { const manifestPath = './src/manifest.json'; @@ -27,20 +27,18 @@ export default async ({ core }: AsyncFunctionArguments) => { function bumpVersion( existingVersion: string, type: BumpType, -): [major: number, minor: number, patch: number, build: number] { +): [major: number, minor: number, patch: number] { const parts = existingVersion.split('.').map(Number); - if (parts.length !== 4 || parts.some((e) => !Number.isSafeInteger(e))) { + if (parts.length !== 3 || parts.some((e) => !Number.isSafeInteger(e))) { throw new Error('Existing version does not have right format'); } - const [major, minor, patch, build] = parts; + const [major, minor, patch] = parts; switch (type) { - case 'build': - return [major, minor, patch, build + 1]; case 'patch': - return [major, minor, patch + 1, 0]; + return [major, minor, patch + 1]; case 'minor': - return [major, minor + 1, 0, 0]; + return [major, minor + 1, 0]; default: throw new Error(`Unknown bump type: ${type}`); } diff --git a/.github/actions/validate-stable-release.ts b/.github/actions/validate-stable-release.ts index f41f58fab..89b168c0a 100644 --- a/.github/actions/validate-stable-release.ts +++ b/.github/actions/validate-stable-release.ts @@ -14,8 +14,8 @@ export default async ({ github, context }: AsyncFunctionArguments) => { if (!previewVersionTag) { throw new Error('Missing env.INPUT_VERSION'); } - if (!previewVersionTag.match(/^v[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-preview$/)) { - throw new Error('Input "version" must match vX.X.X.X-preview'); + if (!previewVersionTag.match(/^v[0-9]+\.[0-9]+\.[0-9]+-preview$/)) { + throw new Error('Input "version" must match vX.X.X-preview'); } const versionTag = previewVersionTag.replace('-preview', ''); diff --git a/.github/workflows/bump-manifest-version.yml b/.github/workflows/bump-manifest-version.yml index 9a7f86cab..e7a3cfd93 100644 --- a/.github/workflows/bump-manifest-version.yml +++ b/.github/workflows/bump-manifest-version.yml @@ -6,10 +6,9 @@ on: version: description: 'Version to bump to' required: true - default: 'build' + default: 'patch' type: choice options: - - build - patch - minor diff --git a/.github/workflows/release-stable.yml b/.github/workflows/release-stable.yml index 384a78887..50f0410df 100644 --- a/.github/workflows/release-stable.yml +++ b/.github/workflows/release-stable.yml @@ -5,7 +5,7 @@ on: workflow_dispatch: inputs: version: - description: 'Tag (vX.X.X.X-preview)' + description: 'Tag (vX.X.X-preview)' required: true type: string diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 4a05ea390..c5493f7c2 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -9,13 +9,11 @@ A separate Nightly release channel will be available via GitHub releases (withou ## Extension versioning -Web extensions do not follow SEMVER. The version string consists of 1 to 4 numbers separated by dots, for example, `1.2.3.4` (`major.minor.patch.build`). This is essentially SEMVER but with an additional build number, but does not support the alpha, beta or other suffixes. +We follow SEMVER (Semantic Versioning) for our extension's versioning (`major.minor.patch`). ### Major version bump -A major version bump (`2.0.0.0`) signifies the start of a block of product features. - -Before the extension is available first on the Stable channel, we only increase the build number (`2.0.0.x`) when publishing to the Preview channel. After that (during maintenance mode), we follow SEMVER (`2.x.y.0`). +A major version bump (`2.0.0`) signifies the start of a block of product features. ### Minor version bump @@ -25,13 +23,8 @@ New features and enhancements will be released under a minor version bump. Bug fixes, performance and small updates will be released under a patch version bump. -### Build version bump - -The build version bump should only happen when starting the work on a new major version. Once a major version (e.g. `v1`) goes into maintenance mode, the extension major version is bumped to `2.0.0.0`. Until the new major version is made available on the Stable channel, only build number should be incremented. - -Multiple "build" version bumps can be made available in the Preview channel. e.g. we can have `2.0.0.1`, `2.0.0.2`, ..., `2.0.0.90` in the Preview channel before we make it available in the Stable channel. - -When the new major version is going to be available in the Stable channel, it will have the last published version as in the Preview channel (i.e. the first Stable channel build could be `2.0.0.90`, not necessarily `2.0.0` or `2.0.1`). +> [!note] +> Build version support was removed in [#1218](https://github.com/interledger/web-monetization-extension/issues/1218) due to incompatibility with Apple App Store (Safari). ## Nightly @@ -60,7 +53,7 @@ Once a new development stage starts for a new major version and we start publish ### Release artifacts -Artifacts follow the name `preview-{browser}-{version}.zip`, e.g. `preview-chrome-1.0.4.0.zip`, `preview-edge-2.0.0.12.zip`, `preview-firefox-2.1.1.0.zip` +Artifacts follow the name `preview-{browser}-{version}.zip`, e.g. `preview-chrome-1.0.4.zip`, `preview-edge-2.0.1.zip`, `preview-firefox-2.1.1.zip` ## Release @@ -70,7 +63,7 @@ Release promotions are triggered manually (via GitHub Actions). ### Release artifacts -Artifacts follow the name `{browser}-{version}.zip`, e.g. `chrome-1.0.4.0.zip`, `edge-2.0.0.12.zip`, `firefox-2.1.1.0.zip`. +Artifacts follow the name `{browser}-{version}.zip`, e.g. `chrome-1.0.4.zip`, `edge-2.0.12.zip`, `firefox-2.1.1.zip`. --- @@ -86,9 +79,9 @@ When there's a commit that needs to be back-ported, the PR corresponding to that --- -# Release Workflow +## Release Workflow -## Releasing to Preview channel +### Releasing to Preview channel 1. Visit ["Bump Manifest Version" manual dispatch workflow](https://github.com/interledger/web-monetization-extension/actions/workflows/bump-manifest-version.yml) and click the "Run workflow" button. - Choose the version bump - build, patch, or minor as described above. @@ -102,11 +95,11 @@ When there's a commit that needs to be back-ported, the PR corresponding to that 1. Extension will be released automatically (via ["Release for Preview Channel" workflow](https://github.com/interledger/web-monetization-extension/actions/workflows/release-preview.yml)) as the PR is merged. - If there's a temporary failure in the action run, re-run the workflow. -## Releasing to Stable channel +### Releasing to Stable channel To promote a Preview channel release to Stable: 1. Run the ["Release Stable" manual-dispatch workflow](https://github.com/interledger/web-monetization-extension/actions/workflows/release-stable.yml). - - Specify the Preview version tag that should be promoted to Stable, e.g. `v1.2.3.5-preview`. + - Specify the Preview version tag that should be promoted to Stable, e.g. `v1.2.3-preview`. - Do not change the branch from "main". 1. Extension will be released on as the workflow runs. diff --git a/src/manifest.json b/src/manifest.json index 490d2e64c..9c4137d95 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/chrome-manifest", "name": "Web Monetization", - "version": "0.11.0.0", + "version": "0.11.0", "manifest_version": 3, "minimum_chrome_version": "110.0", "description": "__MSG_appDescription__", diff --git a/src/safari/Web Monetization/Config.xcconfig b/src/safari/Web Monetization/Config.xcconfig index 3c4c16827..f8bdd8a34 100644 --- a/src/safari/Web Monetization/Config.xcconfig +++ b/src/safari/Web Monetization/Config.xcconfig @@ -5,4 +5,4 @@ // Created by https://github.com/sidvishnoi on 04/07/25. // -CURRENT_PROJECT_VERSION = 0.11.0.0 +CURRENT_PROJECT_VERSION = 0.11.0 From 5be6f5518a1425d1d3801880a630623e1be2782d Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Thu, 23 Oct 2025 19:36:29 +0530 Subject: [PATCH 2/2] nit --- .github/actions/validate-stable-release.ts | 2 +- .github/workflows/release-stable.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/validate-stable-release.ts b/.github/actions/validate-stable-release.ts index 89b168c0a..8654392c5 100644 --- a/.github/actions/validate-stable-release.ts +++ b/.github/actions/validate-stable-release.ts @@ -15,7 +15,7 @@ export default async ({ github, context }: AsyncFunctionArguments) => { throw new Error('Missing env.INPUT_VERSION'); } if (!previewVersionTag.match(/^v[0-9]+\.[0-9]+\.[0-9]+-preview$/)) { - throw new Error('Input "version" must match vX.X.X-preview'); + throw new Error('Input "version" must match vX.Y.Z-preview'); } const versionTag = previewVersionTag.replace('-preview', ''); diff --git a/.github/workflows/release-stable.yml b/.github/workflows/release-stable.yml index fb6398d69..f41f629bf 100644 --- a/.github/workflows/release-stable.yml +++ b/.github/workflows/release-stable.yml @@ -5,7 +5,7 @@ on: workflow_dispatch: inputs: version: - description: 'Tag (vX.X.X-preview)' + description: 'Tag (vX.Y.Z-preview)' required: true type: string