From 9e902048058740bd2d0e59b737796b382664a751 Mon Sep 17 00:00:00 2001 From: Lutz Wrage Date: Wed, 2 Sep 2026 08:49:06 -0400 Subject: [PATCH 1/2] Let the tag choose whether the extension is a pre-release `vscode-v0.0.2` publishes a stable release; `vscode-v0.0.2-pre` publishes a pre-release of the same version. VS Code keeps users on the newest stable build unless they opt that extension into the pre-release channel, so this is how a build reaches willing testers without being pushed at everyone. The suffix has to live on the tag: VS Code extension versions must stay major.minor.patch, so a pre-release is not a different version string but a property inside the package. That property is written by `vsce package --pre-release`, and vsce refuses to publish a package as a pre-release unless it was built as one: Cannot use '--pre-release' flag with a package that was not packaged as pre-release. Please package it using the '--pre-release' flag and publish again. Which means the choice belongs at build time, and the tag has to drive the whole chain rather than only the final publish call: - package.json gains a `package:pre-release` script. A sibling script rather than shell interpolation inside the existing one, which would not work under cmd.exe. - vscode-extension/pom.xml selects it through a `vsce.package.script` property. - scripts/build-test-release gains `--extension-pre-release`, which sets that property. - build.yml gains an `extension-pre-release` input mapped onto the flag. - release-vscode.yml parses the `-pre` suffix, passes it down, adds `--pre-release` to both `vsce publish` and `ovsx publish`, and marks the GitHub Release as a prerelease. Before publishing, the workflow re-reads the built VSIX manifest and fails if the marker disagrees with the tag, so the two cannot drift: vsce would reject one direction, and the other would quietly ship a pre-release as stable. Verified end to end locally: the flag reaches `npm run package:pre-release` and produces `Microsoft.VisualStudio.Code.PreRelease" Value="true"` in the manifest, while a default build has no marker. Tag parsing accepts `vscode-v0.0.2` and `vscode-v0.0.2-pre`, and rejects a wrong version or an unrecognized suffix rather than treating it as stable. Documented in RELEASING.md and vscode-extension/AGENTS.md. Also carries the icon you added, which registers as Icons.Default in the VSIX with the SVG source excluded. --- .github/workflows/build.yml | 7 +++ .github/workflows/release-vscode.yml | 68 ++++++++++++++++++++++++--- RELEASING.md | 47 +++++++++++++++++- scripts/build-test-release | 17 ++++++- vscode-extension/.vscodeignore | 1 + vscode-extension/AGENTS.md | 9 +++- vscode-extension/CHANGELOG.md | 1 + vscode-extension/images/icon.png | Bin 0 -> 6441 bytes vscode-extension/images/icon.svg | 2 + vscode-extension/package.json | 2 + vscode-extension/pom.xml | 7 ++- 11 files changed, 151 insertions(+), 10 deletions(-) create mode 100644 vscode-extension/images/icon.png create mode 100644 vscode-extension/images/icon.svg diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1aaef44..2e95015 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,6 +20,10 @@ on: description: Build the VS Code extension. type: boolean default: true + extension-pre-release: + description: Mark the VSIX as a pre-release. + type: boolean + default: false test-extension: description: Run the VS Code extension test suites. type: boolean @@ -212,6 +216,9 @@ jobs: if [ "${{ inputs.build-cli }}" != "true" ]; then args+=(--skip-cli) fi + if [ "${{ inputs.extension-pre-release }}" = "true" ]; then + args+=(--extension-pre-release) + fi printf 'build-test-release %s\n' "${args[*]}" ./scripts/build-test-release "${args[@]}" diff --git a/.github/workflows/release-vscode.yml b/.github/workflows/release-vscode.yml index 7cd92b9..b0f4d48 100644 --- a/.github/workflows/release-vscode.yml +++ b/.github/workflows/release-vscode.yml @@ -1,8 +1,13 @@ # Releases the VS Code extension when a vscode-v* tag is pushed. # -# package.json holds the version; the tag is validated against it. The Marketplace -# and Open VSX steps skip cleanly until their tokens are configured, so the -# workflow is usable for GitHub Releases before those accounts exist. +# package.json holds the version; the tag is validated against it. A `-pre` suffix +# on the tag publishes a pre-release: vscode-v0.0.2 is stable, vscode-v0.0.2-pre is +# not. The suffix lives on the tag rather than in the version because VS Code +# extension versions must stay major.minor.patch; what marks a pre-release is a +# property inside the package. +# +# The Marketplace and Open VSX steps skip cleanly until their tokens are +# configured, so the workflow is usable for GitHub Releases before that. name: Release VS Code extension @@ -23,14 +28,25 @@ jobs: timeout-minutes: 5 outputs: version: ${{ steps.check.outputs.version }} + pre-release: ${{ steps.check.outputs.pre-release }} steps: - uses: actions/checkout@v5 - id: check run: | manifest=$(node -p "require('./vscode-extension/package.json').version") + pre_release=false + if [ "${GITHUB_REF_TYPE}" = "tag" ]; then tag_version="${GITHUB_REF_NAME#vscode-v}" + # A -pre suffix selects a pre-release and is not part of the version. + case "$tag_version" in + *-pre) + pre_release=true + tag_version="${tag_version%-pre}" + ;; + esac + if [ "$tag_version" != "$manifest" ]; then echo "Tag $GITHUB_REF_NAME implies version $tag_version," >&2 echo "but vscode-extension/package.json declares $manifest." >&2 @@ -38,8 +54,14 @@ jobs: exit 1 fi fi + echo "version=$manifest" >> "$GITHUB_OUTPUT" - echo "extension version $manifest" >> "$GITHUB_STEP_SUMMARY" + echo "pre-release=$pre_release" >> "$GITHUB_OUTPUT" + if [ "$pre_release" = "true" ]; then + echo "extension version $manifest (pre-release)" >> "$GITHUB_STEP_SUMMARY" + else + echo "extension version $manifest (stable)" >> "$GITHUB_STEP_SUMMARY" + fi build: needs: verify-version @@ -51,6 +73,9 @@ jobs: build-extension: true test-extension: true upload-artifacts: true + # Decided at build time: vsce refuses to publish a package as a pre-release + # unless the marker is already in its manifest. + extension-pre-release: ${{ needs.verify-version.outputs.pre-release == 'true' }} publish: name: Publish @@ -61,6 +86,7 @@ jobs: contents: write env: VERSION: ${{ needs.verify-version.outputs.version }} + PRE_RELEASE: ${{ needs.verify-version.outputs.pre-release }} # Job-level so the publish steps' `if` expressions can test them. VSCE_PAT: ${{ secrets.VSCE_PAT }} OVSX_PAT: ${{ secrets.OVSX_PAT }} @@ -94,6 +120,21 @@ jobs: echo "Too few server plug-ins; the symlink did not resolve." >&2 exit 1 fi + + # The marker is baked in at package time, so confirm the package matches + # what the tag asked for. vsce would reject a mismatch in one direction + # and silently publish a pre-release as stable in the other. + if unzip -p "$vsix" extension.vsixmanifest | grep -q 'Microsoft.VisualStudio.Code.PreRelease'; then + marked=true + else + marked=false + fi + echo "packaged as pre-release: $marked (tag asked for $PRE_RELEASE)" + if [ "$marked" != "$PRE_RELEASE" ]; then + echo "VSIX pre-release marker does not match the tag." >&2 + exit 1 + fi + echo "VSIX=$vsix" >> "$GITHUB_ENV" - name: Create the GitHub release @@ -101,10 +142,15 @@ jobs: env: GH_TOKEN: ${{ github.token }} run: | + args=() + if [ "$PRE_RELEASE" = "true" ]; then + args+=(--prerelease) + fi gh release create "$GITHUB_REF_NAME" \ --repo "$GITHUB_REPOSITORY" \ --title "AADL2 VS Code extension $VERSION" \ --generate-notes \ + "${args[@]+"${args[@]}"}" \ "$VSIX" - name: Install publishing tools @@ -117,7 +163,12 @@ jobs: - name: Publish to the VS Code Marketplace if: github.ref_type == 'tag' && env.VSCE_PAT != '' working-directory: vscode-extension - run: npx --no-install vsce publish --packagePath "../$VSIX" + run: | + args=() + if [ "$PRE_RELEASE" = "true" ]; then + args+=(--pre-release) + fi + npx --no-install vsce publish --packagePath "../$VSIX" "${args[@]+"${args[@]}"}" # Requires the "osate" namespace claimed at open-vsx.org and its token # stored as OVSX_PAT. @@ -126,7 +177,12 @@ jobs: working-directory: vscode-extension # --yes because ovsx is not a devDependency, so npx must fetch it and # would otherwise wait for a confirmation that never comes in CI. - run: npx --yes ovsx publish "../$VSIX" --pat "$OVSX_PAT" + run: | + args=() + if [ "$PRE_RELEASE" = "true" ]; then + args+=(--pre-release) + fi + npx --yes ovsx publish "../$VSIX" --pat "$OVSX_PAT" "${args[@]+"${args[@]}"}" - name: Note skipped publications if: github.ref_type == 'tag' diff --git a/RELEASING.md b/RELEASING.md index 65cd330..11a99ac 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -6,7 +6,7 @@ by pushing a component-prefixed tag; nothing is published from `main`. | Component | Tag | Version source | | --- | --- | --- | | `osate-cli` | `osate-cli-v` | `` in [`osate-cli/pom.xml`](osate-cli/pom.xml) | -| VS Code extension | `vscode-v` | `version` in [`vscode-extension/package.json`](vscode-extension/package.json) | +| VS Code extension | `vscode-v` or `vscode-v-pre` | `version` in [`vscode-extension/package.json`](vscode-extension/package.json) | | Language server | `ls-v` | `aadl.ls.parent` version in [`aadl-language-server/pom.xml`](aadl-language-server/pom.xml) | The tag does not set the version. Each release workflow reads the version out of @@ -49,6 +49,51 @@ Code Marketplace and Open VSX. The VSIX is checked for a plausible number of bundled server plug-ins first, because the server reaches it through a symlink that would otherwise fail silently. +### Stable or pre-release + +A `-pre` suffix on the tag publishes a pre-release; without it the release is +stable. The version itself is identical either way: + +```bash +git tag vscode-v0.0.2-pre # pre-release: users must opt in +git tag vscode-v0.0.2 # stable: offered to everyone +``` + +A pre-release is marked as such on the Marketplace and on Open VSX, and the +GitHub Release gets the pre-release badge. VS Code keeps users on the newest +*stable* version unless they explicitly switch that extension to the pre-release +channel, so this is the way to put a build in front of willing testers without +pushing it at everyone. + +The suffix belongs on the tag rather than in the version because VS Code +extension versions must stay `major.minor.patch` — a pre-release is not a +different version string, it is a property recorded inside the package. That +property is written by `vsce package --pre-release`, and `vsce publish` **refuses** +to publish a package as a pre-release unless it was built as one: + +```text +Cannot use '--pre-release' flag with a package that was not packaged as +pre-release. Please package it using the '--pre-release' flag and publish again. +``` + +So the decision is made at build time, not publish time. The tag drives it all +the way down: `release-vscode.yml` parses the suffix, passes +`extension-pre-release` to the build workflow, which passes +`--extension-pre-release` to `scripts/build-test-release`, which sets +`-Dvsce.package.script=package:pre-release` so Maven runs the npm script that adds +the flag. Before publishing, the workflow re-reads the built VSIX manifest and +fails if the marker disagrees with the tag, so the two cannot drift apart. + +Marketplace and Open VSX both treat a published version as permanent — you can +unpublish an extension but not an individual version. Choosing pre-release does +not change that; it only changes who is offered the build. + +To produce a pre-release VSIX locally: + +```bash +./scripts/build-test-release --skip-osate --extension-pre-release +``` + **`ls-v*`** — [`release-server.yml`](.github/workflows/release-server.yml) The p2 repository archive plus `build-provenance.properties`, attached to a diff --git a/scripts/build-test-release b/scripts/build-test-release index 33c318b..80664a2 100755 --- a/scripts/build-test-release +++ b/scripts/build-test-release @@ -36,6 +36,7 @@ skip_osate=false skip_extension=false skip_extension_tests=false skip_cli=false +extension_pre_release=false usage() { cat <<'EOF' @@ -57,6 +58,10 @@ Options: integration tests download VS Code and need a display, which is not always available. --skip-cli Do not build the osate-cli reactor. + --extension-pre-release Mark the VSIX as a pre-release. vsce writes this into + the package manifest and refuses to publish a package + as a pre-release unless it was built as one, so this + has to be decided at build time. -h, --help Show this help. EOF } @@ -76,6 +81,9 @@ while [[ $# -gt 0 ]]; do --skip-cli) skip_cli=true ;; + --extension-pre-release) + extension_pre_release=true + ;; -h | --help) usage exit 0 @@ -174,12 +182,19 @@ mvn \ if [[ "${skip_extension}" == true ]]; then echo "Skipping VS Code extension" else - echo "Building VS Code extension" + extension_args=() + if [[ "${extension_pre_release}" == true ]]; then + echo "Building VS Code extension (pre-release)" + extension_args+=(-Dvsce.package.script=package:pre-release) + else + echo "Building VS Code extension" + fi mvn \ -T6 \ -f "${repo_root}/vscode-extension/pom.xml" \ -Dtycho.localArtifacts=ignore \ + "${extension_args[@]+"${extension_args[@]}"}" \ clean verify fi diff --git a/vscode-extension/.vscodeignore b/vscode-extension/.vscodeignore index 88c70ca..afbff4a 100644 --- a/vscode-extension/.vscodeignore +++ b/vscode-extension/.vscodeignore @@ -11,6 +11,7 @@ src/** .gitignore .yarnrc vsc-extension-quickstart.md +images/*.svg **/tsconfig.json **/tsconfig.test.json **/.eslintrc.json diff --git a/vscode-extension/AGENTS.md b/vscode-extension/AGENTS.md index 1ad8347..8b882b8 100644 --- a/vscode-extension/AGENTS.md +++ b/vscode-extension/AGENTS.md @@ -58,9 +58,16 @@ tests. Package the extension with: ```bash -npm run package +npm run package # stable +npm run package:pre-release # marked as a pre-release ``` +The pre-release marker is written into the VSIX manifest at package time, and +`vsce publish` refuses to publish a package as a pre-release unless it was built +as one, so it cannot be added later. `vscode-extension/pom.xml` selects the script +through the `vsce.package.script` property, which is how a tagged release drives +it. See [../RELEASING.md](../RELEASING.md). + For a server plus extension build, first build OSATE, then run these from the repository root in this order: diff --git a/vscode-extension/CHANGELOG.md b/vscode-extension/CHANGELOG.md index 8af8a5c..e5f3aa2 100644 --- a/vscode-extension/CHANGELOG.md +++ b/vscode-extension/CHANGELOG.md @@ -29,6 +29,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [Unreleased] +- Add the AADL vector mark as the extension icon. - Add bus load analysis command for instance models. - Initial release diff --git a/vscode-extension/images/icon.png b/vscode-extension/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2c81592d3ab808126acb9ca7788ac5042f074e13 GIT binary patch literal 6441 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 DPJ#_W literal 0 HcmV?d00001 diff --git a/vscode-extension/images/icon.svg b/vscode-extension/images/icon.svg new file mode 100644 index 0000000..e630875 --- /dev/null +++ b/vscode-extension/images/icon.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/vscode-extension/package.json b/vscode-extension/package.json index da6ffa2..2599538 100644 --- a/vscode-extension/package.json +++ b/vscode-extension/package.json @@ -5,6 +5,7 @@ "description": "Support for AADL2 modeling", "version": "0.0.2", "license": "LicenseRef-BSD-SEI", + "icon": "images/icon.png", "repository": { "type": "git", "url": "https://github.com/osate/aadl-tooling.git" @@ -196,6 +197,7 @@ "watch": "node esbuild.js --watch", "package-bundle": "node esbuild.js --production", "package": "npm run package-bundle && vsce package --no-dependencies --follow-symlinks", + "package:pre-release": "npm run package-bundle && vsce package --no-dependencies --follow-symlinks --pre-release", "check-types": "tsc -b ./ --noEmit", "compile-tests": "tsc -p tsconfig.test.json", "test:unit": "npm run compile-tests && mocha --ui tdd \"out/test/unit/**/*.test.js\"", diff --git a/vscode-extension/pom.xml b/vscode-extension/pom.xml index a2787f4..9443301 100644 --- a/vscode-extension/pom.xml +++ b/vscode-extension/pom.xml @@ -40,6 +40,11 @@ 1.15.1 v22.22.3 + + package ${project.basedir}/../aadl-language-server/releng/org.osate.aadl.ls.repository/target/repository/plugins @@ -124,7 +129,7 @@ package - run package + run ${vsce.package.script} From 7fbfec98e4f2d78fff9ebf8dca7c866cbad8029b Mon Sep 17 00:00:00 2001 From: Lutz Wrage Date: Wed, 2 Sep 2026 09:20:03 -0400 Subject: [PATCH 2/2] Set all three components to 0.1.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language server, osate-cli and the VS Code extension were at three unrelated versions (1.0.0-SNAPSHOT, 0.1.3, 0.0.2). Nothing has been tagged or released yet, so the CLI moving down from 0.1.3 affects no published artifact. The language server keeps the Tycho development form, 0.1.0-SNAPSHOT paired with Bundle-Version 0.1.0.qualifier, so each build still stamps a timestamp and p2 can tell rebuilds apart. Tycho requires the pom and manifest versions to agree, so both manifests moved with the poms. Releasing ls-v0.1.0 still means dropping -SNAPSHOT first, which release-server.yml already enforces. The root aggregator moved to 0.1.0-SNAPSHOT as well. It ships nothing, but it is what build-provenance.properties records as tooling.version, which would otherwise report 1.0.0-SNAPSHOT for a build of three 0.1.0 components. Its parent reference in vscode-extension/pom.xml moved with it. The extension version was bumped with `npm version` so package.json and package-lock.json stay in step, and CHANGELOG.md promotes [Unreleased] to [0.1.0]. The RELEASING.md tag examples now use the real versions. Verified by a full build rather than inspection, since Tycho rejects a pom and manifest that disagree: language server 0.1.0 with 35 tests, extension 0.1.0, CLI 0.1.0, and all five test-count assertions passing. The artifacts carry it through — org.osate.aadl.ls_0.1.0.v20260902-1313.jar, aadl2-0.1.0.vsix, `osate-cli --version` reporting 0.1.0, and provenance recording tooling.version=0.1.0-SNAPSHOT with cli.version=0.1.0. --- RELEASING.md | 8 ++++---- .../org.osate.aadl.ls/META-INF/MANIFEST.MF | 2 +- aadl-language-server/org.osate.aadl.ls/pom.xml | 4 ++-- .../plugins/org.osate.aadl.ls.tests/META-INF/MANIFEST.MF | 2 +- .../plugins/org.osate.aadl.ls.tests/pom.xml | 4 ++-- aadl-language-server/pom.xml | 2 +- .../releng/org.osate.aadl.ls.repository/pom.xml | 2 +- osate-cli/pom.xml | 2 +- pom.xml | 2 +- vscode-extension/CHANGELOG.md | 3 +++ vscode-extension/package-lock.json | 4 ++-- vscode-extension/package.json | 2 +- vscode-extension/pom.xml | 2 +- 13 files changed, 21 insertions(+), 18 deletions(-) diff --git a/RELEASING.md b/RELEASING.md index 11a99ac..b5b62b2 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -23,8 +23,8 @@ of truth. Bump the version in a normal commit first, then tag that commit. # 2. Tag the merged commit and push the tag. git switch main && git pull -git tag osate-cli-v0.1.4 -git push origin osate-cli-v0.1.4 +git tag osate-cli-v0.1.0 +git push origin osate-cli-v0.1.0 ``` Watch it with `gh run watch`. Each workflow also accepts `workflow_dispatch`, @@ -55,8 +55,8 @@ A `-pre` suffix on the tag publishes a pre-release; without it the release is stable. The version itself is identical either way: ```bash -git tag vscode-v0.0.2-pre # pre-release: users must opt in -git tag vscode-v0.0.2 # stable: offered to everyone +git tag vscode-v0.1.0-pre # pre-release: users must opt in +git tag vscode-v0.1.0 # stable: offered to everyone ``` A pre-release is marked as such on the Marketplace and on Open VSX, and the diff --git a/aadl-language-server/org.osate.aadl.ls/META-INF/MANIFEST.MF b/aadl-language-server/org.osate.aadl.ls/META-INF/MANIFEST.MF index c56b8e9..6529f3d 100644 --- a/aadl-language-server/org.osate.aadl.ls/META-INF/MANIFEST.MF +++ b/aadl-language-server/org.osate.aadl.ls/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: AADL Language Server Bundle-SymbolicName: org.osate.aadl.ls;singleton:=true -Bundle-Version: 1.0.0.qualifier +Bundle-Version: 0.1.0.qualifier Bundle-Vendor: CMU-SEI Automatic-Module-Name: org.osate.aadl.ls Bundle-RequiredExecutionEnvironment: JavaSE-21 diff --git a/aadl-language-server/org.osate.aadl.ls/pom.xml b/aadl-language-server/org.osate.aadl.ls/pom.xml index cc3a5e0..11c8dff 100644 --- a/aadl-language-server/org.osate.aadl.ls/pom.xml +++ b/aadl-language-server/org.osate.aadl.ls/pom.xml @@ -31,13 +31,13 @@ org.osate aadl.ls.parent - 1.0.0-SNAPSHOT + 0.1.0-SNAPSHOT .. org.osate org.osate.aadl.ls - 1.0.0-SNAPSHOT + 0.1.0-SNAPSHOT eclipse-plugin diff --git a/aadl-language-server/plugins/org.osate.aadl.ls.tests/META-INF/MANIFEST.MF b/aadl-language-server/plugins/org.osate.aadl.ls.tests/META-INF/MANIFEST.MF index a4128a9..0138f88 100644 --- a/aadl-language-server/plugins/org.osate.aadl.ls.tests/META-INF/MANIFEST.MF +++ b/aadl-language-server/plugins/org.osate.aadl.ls.tests/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: AADL Language Server Tests Bundle-SymbolicName: org.osate.aadl.ls.tests;singleton:=true -Bundle-Version: 1.0.0.qualifier +Bundle-Version: 0.1.0.qualifier Bundle-Vendor: CMU-SEI Fragment-Host: org.osate.aadl.ls Automatic-Module-Name: org.osate.aadl.ls.tests diff --git a/aadl-language-server/plugins/org.osate.aadl.ls.tests/pom.xml b/aadl-language-server/plugins/org.osate.aadl.ls.tests/pom.xml index 27778ed..5c19fd1 100644 --- a/aadl-language-server/plugins/org.osate.aadl.ls.tests/pom.xml +++ b/aadl-language-server/plugins/org.osate.aadl.ls.tests/pom.xml @@ -31,13 +31,13 @@ org.osate aadl.ls.parent - 1.0.0-SNAPSHOT + 0.1.0-SNAPSHOT ../.. org.osate org.osate.aadl.ls.tests - 1.0.0-SNAPSHOT + 0.1.0-SNAPSHOT eclipse-test-plugin diff --git a/aadl-language-server/pom.xml b/aadl-language-server/pom.xml index 6e4915b..e3c6f40 100644 --- a/aadl-language-server/pom.xml +++ b/aadl-language-server/pom.xml @@ -37,7 +37,7 @@ aadl.ls.parent - 1.0.0-SNAPSHOT + 0.1.0-SNAPSHOT pom diff --git a/aadl-language-server/releng/org.osate.aadl.ls.repository/pom.xml b/aadl-language-server/releng/org.osate.aadl.ls.repository/pom.xml index 236f83a..2637c12 100644 --- a/aadl-language-server/releng/org.osate.aadl.ls.repository/pom.xml +++ b/aadl-language-server/releng/org.osate.aadl.ls.repository/pom.xml @@ -31,7 +31,7 @@ org.osate aadl.ls.parent - 1.0.0-SNAPSHOT + 0.1.0-SNAPSHOT ../.. diff --git a/osate-cli/pom.xml b/osate-cli/pom.xml index eba354b..9c86e65 100644 --- a/osate-cli/pom.xml +++ b/osate-cli/pom.xml @@ -45,7 +45,7 @@ the tarball, deb, rpm, and Homebrew package versions. Keep it a plain release version: rpm forbids '-' in Version, so a '-SNAPSHOT' suffix would not survive packaging. --> - 0.1.3 + 0.1.0 21 UTF-8 2.11.0 diff --git a/pom.xml b/pom.xml index 5356789..04ba777 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.osate aadl-language-server-aggregator - 1.0.0-SNAPSHOT + 0.1.0-SNAPSHOT pom diff --git a/vscode-extension/CHANGELOG.md b/vscode-extension/CHANGELOG.md index e5f3aa2..256bcf9 100644 --- a/vscode-extension/CHANGELOG.md +++ b/vscode-extension/CHANGELOG.md @@ -29,6 +29,9 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [Unreleased] +## [0.1.0] - 2026-09-02 + +- Align the extension version with the language server and osate-cli at 0.1.0. - Add the AADL vector mark as the extension icon. - Add bus load analysis command for instance models. - Initial release diff --git a/vscode-extension/package-lock.json b/vscode-extension/package-lock.json index ce30274..6fbf210 100644 --- a/vscode-extension/package-lock.json +++ b/vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "aadl2", - "version": "0.0.2", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aadl2", - "version": "0.0.2", + "version": "0.1.0", "license": "LicenseRef-BSD-SEI", "dependencies": { "vscode-languageclient": "^9.0.1" diff --git a/vscode-extension/package.json b/vscode-extension/package.json index 2599538..48b7d58 100644 --- a/vscode-extension/package.json +++ b/vscode-extension/package.json @@ -3,7 +3,7 @@ "displayName": "AADL2", "publisher": "osate", "description": "Support for AADL2 modeling", - "version": "0.0.2", + "version": "0.1.0", "license": "LicenseRef-BSD-SEI", "icon": "images/icon.png", "repository": { diff --git a/vscode-extension/pom.xml b/vscode-extension/pom.xml index 9443301..e6914cd 100644 --- a/vscode-extension/pom.xml +++ b/vscode-extension/pom.xml @@ -30,7 +30,7 @@ org.osate aadl-language-server-aggregator - 1.0.0-SNAPSHOT + 0.1.0-SNAPSHOT ../pom.xml