Skip to content

Commit bca8ca5

Browse files
xpp-lens 1.3.0-beta.1 (test release)
### Added - Test releases: a version can first be published as `X.Y.Z-beta.N`, marked as a pre-release on GitHub. `xpplens update` never offers it; `xpplens update --install --pre` installs the newest release including test releases, so a new version can be tried on one machine before everyone gets it. The regular `X.Y.Z` later replaces a test release through the usual `xpplens update --install`. - `xpplens version`, `status` and the MCP server report the full version of a test release (`1.3.0-beta.1`); versions compare with test releases before their final version (`1.3.0-beta.2` < `1.3.0`). ### Development - Work happens on the branch `dev`; `main` always holds the last regular release. `release.ps1 -Version X.Y.Z -Pre` publishes a test release from `dev`; `release.ps1 -Version X.Y.Z` opens the pull request `dev` → `main`, waits for its CI, merges it (merge commit), tags the merge and publishes the release, then moves `dev` to `main`. CI also runs for pushes to `dev`. The release notes of a test release come from the section of its final version.
1 parent bcffc61 commit bca8ca5

12 files changed

Lines changed: 316 additions & 109 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: CI
22

33
on:
44
push:
5-
branches: [main]
5+
branches: [main, dev]
66
pull_request:
77
branches: [main]
88
workflow_dispatch:

‎.github/workflows/release.yml‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,12 @@ jobs:
4545
shell: powershell
4646
run: .\pack.ps1 -OutDir dist
4747

48+
# vX.Y.Z-beta.N is a test release: marked as pre-release, never "Latest", so 'xpplens update' does not offer it
49+
# ('xpplens update --pre' does).
4850
- name: Publish the release
4951
shell: pwsh
5052
env:
5153
GH_TOKEN: ${{ github.token }}
52-
run: gh release create $env:TAG "dist/xpp-lens-$env:VERSION.zip" --title "xpp-lens $env:VERSION" --notes-file dist/notes.md --verify-tag --latest
54+
run: |
55+
$kind = if ($env:TAG -match '-') { '--prerelease' } else { '--latest' }
56+
gh release create $env:TAG "dist/xpp-lens-$env:VERSION.zip" --title "xpp-lens $env:VERSION" --notes-file dist/notes.md --verify-tag $kind

‎CHANGELOG.md‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,22 @@
33
All notable changes to xpp-lens (called xpp-graft up to 1.2.0). Versions follow `<Version>` in
44
`src/XppLens/XppLens.csproj`; release tags are `vX.Y.Z`.
55

6+
## 1.3.0 — unreleased
7+
8+
### Added
9+
- Test releases: a version can first be published as `X.Y.Z-beta.N`, marked as a pre-release on GitHub.
10+
`xpplens update` never offers it; `xpplens update --install --pre` installs the newest release including test
11+
releases, so a new version can be tried on one machine before everyone gets it. The regular `X.Y.Z` later
12+
replaces a test release through the usual `xpplens update --install`.
13+
- `xpplens version`, `status` and the MCP server report the full version of a test release (`1.3.0-beta.1`); versions
14+
compare with test releases before their final version (`1.3.0-beta.2` < `1.3.0`).
15+
16+
### Development
17+
- Work happens on the branch `dev`; `main` always holds the last regular release. `release.ps1 -Version X.Y.Z -Pre`
18+
publishes a test release from `dev`; `release.ps1 -Version X.Y.Z` opens the pull request `dev` → `main`, waits
19+
for its CI, merges it (merge commit), tags the merge and publishes the release, then moves `dev` to `main`.
20+
CI also runs for pushes to `dev`. The release notes of a test release come from the section of its final version.
21+
622
## 1.2.9 — 2026-10-14
723

824
### Fixed

‎README.md‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ it (SHA-256 checked) and runs its installer — settings and index are kept. Run
4343
does the same. Claude does not have to be closed: an `xpplens.exe` used by an open session is renamed to `*.old`
4444
(deleted later), so that session keeps the old version and new sessions start the new one. At the end the installer
4545
offers to restart Claude Desktop (`xpplens update --install --restart-claude` or `install.ps1 -RestartClaude`: without
46-
asking); in Claude Code `/mcp` → reconnect xpp-lens does the same for one session.
46+
asking); in Claude Code `/mcp` → reconnect xpp-lens does the same for one session. Test releases (`X.Y.Z-beta.N`)
47+
are offered only with `--pre`: `xpplens update --install --pre`.
4748

4849
Useful parameters:
4950

@@ -255,15 +256,19 @@ Adding a test: put the XML the case needs into `Fixtures` (keep names neutral
255256

256257
### Releasing a new version
257258

258-
Add the section `## X.Y.Z — unreleased` to `CHANGELOG.md`, then:
259+
Work happens on the branch `dev`; `main` always holds the last regular release. Add the section
260+
`## X.Y.Z — unreleased` to `CHANGELOG.md`, then on `dev`:
259261

260262
```powershell
261-
.\release.ps1 -Version X.Y.Z # everything below, stops at the first failure
263+
.\release.ps1 -Version X.Y.Z -Pre # test release X.Y.Z-beta.N (pre-release; xpplens update --install --pre)
264+
.\release.ps1 -Version X.Y.Z # regular release: pull request dev -> main, merge, tag, publish
262265
.\release.ps1 -Version X.Y.Z -DryRun # checks, scan, build and tests only
263266
```
264267

265-
It dates the section, sets `<Version>`, scans every file for private names, builds and tests, commits and pushes
266-
`main`, waits for CI, tags, waits for the Release workflow and checks the published package (SHA-256, layout).
268+
Both stop at the first failure. They set `<Version>`, scan every file for private names, build and test, commit
269+
and push `dev` and wait for CI. A test release is then tagged on `dev`; a regular release dates the CHANGELOG
270+
section, merges `dev` into `main` through a pull request (merge commit) and is tagged on `main`, after which `dev` is
271+
moved to `main`. Both wait for the Release workflow and check the published package (SHA-256, layout, kind).
267272
The private names (customers, partners, people) come from a local list that is never part of the repository:
268273
`-ScanList <file>`, the `XPPLENS_SCAN_LIST` variable, or `%USERPROFILE%\.claude\skills\xpp-lens-release\scan-names.txt`
269274
— one regular expression per line, `!word` for allowed words. Without the list the release stops.

‎README.pl.md‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ z nowszej paczki. Nie trzeba zamykać Claude'a: `xpplens.exe` używany przez otw
4444
(usuwaną później), więc ta sesja działa dalej na starej wersji, a nowe sesje startują już na nowej. Na końcu instalator
4545
proponuje ponowne uruchomienie Claude Desktop (`xpplens update --install --restart-claude` albo
4646
`install.ps1 -RestartClaude` — bez pytania); w Claude Code to samo dla jednej sesji daje `/mcp` → reconnect xpp-lens.
47+
Wydania testowe (`X.Y.Z-beta.N`) są proponowane tylko z `--pre`: `xpplens update --install --pre`.
4748

4849
Przydatne parametry:
4950

@@ -256,16 +257,20 @@ w `QueryTests.cs`, który woła zapytanie i sprawdza tekst odpowiedzi. Uruchamia
256257

257258
### Wydanie nowej wersji
258259

259-
Dopisz w `CHANGELOG.md` sekcję `## X.Y.Z — unreleased`, potem:
260+
Praca idzie na gałęzi `dev`; `main` zawsze zawiera ostatnie zwykłe wydanie. Dopisz w `CHANGELOG.md` sekcję
261+
`## X.Y.Z — unreleased`, potem na `dev`:
260262

261263
```powershell
262-
.\release.ps1 -Version X.Y.Z # wszystko poniżej, staje na pierwszym błędzie
264+
.\release.ps1 -Version X.Y.Z -Pre # wydanie testowe X.Y.Z-beta.N (pre-release; xpplens update --install --pre)
265+
.\release.ps1 -Version X.Y.Z # zwykłe wydanie: pull request dev -> main, scalenie, tag, publikacja
263266
.\release.ps1 -Version X.Y.Z -DryRun # tylko kontrole, skan, build i testy
264267
```
265268

266-
Skrypt wstawia datę w sekcji, ustawia `<Version>`, skanuje wszystkie pliki pod nazwy prywatne, buduje i testuje,
267-
robi commit i push `main`, czeka na CI, zakłada tag, czeka na workflow Release i sprawdza opublikowaną paczkę
268-
(SHA-256, układ). Nazwy prywatne (klienci, partnerzy, ludzie) pochodzą z lokalnej listy, która nigdy nie trafia do
269+
Oba warianty stają na pierwszym błędzie. Ustawiają `<Version>`, skanują wszystkie pliki pod nazwy prywatne,
270+
budują i testują, robią commit i push `dev` i czekają na CI. Wydanie testowe dostaje tag na `dev`; zwykłe wstawia
271+
datę w sekcji CHANGELOG, scala `dev` do `main` przez pull request (zwykłe scalanie) i dostaje tag na `main`, po czym
272+
`dev` przesuwa się do `main`. Oba czekają na workflow Release i sprawdzają opublikowaną paczkę (SHA-256, układ,
273+
rodzaj wydania). Nazwy prywatne (klienci, partnerzy, ludzie) pochodzą z lokalnej listy, która nigdy nie trafia do
269274
repozytorium: `-ScanList <plik>`, zmienna `XPPLENS_SCAN_LIST` albo
270275
`%USERPROFILE%\.claude\skills\xpp-lens-release\scan-names.txt` — jedno wyrażenie regularne w linii, `!słowo` dla
271276
dozwolonych słów. Bez listy wydanie się zatrzymuje.

‎release-notes.ps1‎

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,33 @@ $ErrorActionPreference = 'Stop'
2121
$changelog = [IO.File]::ReadAllText((Join-Path $PSScriptRoot 'CHANGELOG.md'), [Text.Encoding]::UTF8) -replace "`r`n", "`n"
2222
$lines = $changelog -split "`n"
2323

24+
# A test release (1.3.0-beta.2) is described by the section of the version it leads to (## 1.3.0 - unreleased).
25+
$isTest = $Version -match '-'
26+
$sectionVersion = ($Version -split '-')[0]
2427
$start = -1
2528
for ($i = 0; $i -lt $lines.Count; $i++) {
26-
if ($lines[$i] -match ('^## ' + [regex]::Escape($Version) + '(\s|$)')) { $start = $i; break }
29+
if ($lines[$i] -match ('^## ' + [regex]::Escape($sectionVersion) + '(\s|$)')) { $start = $i; break }
2730
}
28-
if ($start -lt 0) { throw "CHANGELOG.md has no section '## $Version'" }
31+
if ($start -lt 0) { throw "CHANGELOG.md has no section '## $sectionVersion'" }
2932
$end = $lines.Count
3033
for ($i = $start + 1; $i -lt $lines.Count; $i++) {
3134
if ($lines[$i] -match '^## ') { $end = $i; break }
3235
}
3336
$section = if ($end - 1 -gt $start) { ($lines[($start + 1)..($end - 1)] -join "`n").Trim() } else { '' }
3437
if (-not $section) { throw "the CHANGELOG.md section for $Version is empty" }
3538

39+
$testNote = if ($isTest) {
40+
@"
41+
**Test release** of $sectionVersion, for trying it out before the regular release. ``xpplens update`` does not offer
42+
it; install it with ``xpplens update --install --pre`` (available from 1.3.0). The regular $sectionVersion replaces it
43+
through the usual ``xpplens update --install``.
44+
45+
46+
"@
47+
} else { '' }
48+
3649
$notes = @"
37-
X++ (Dynamics 365 F&O) code index served to AI assistants over MCP.
50+
$($testNote)X++ (Dynamics 365 F&O) code index served to AI assistants over MCP.
3851
3952
## Install
4053
@@ -44,9 +57,9 @@ Download ``xpp-lens-$Version.zip``, unzip it and run in a regular (non-admin) Po
4457
powershell -ExecutionPolicy Bypass -File .\xpp-lens\install.ps1 -Languages en-US,pl
4558
``````
4659
47-
Self-contained build - no .NET required on the target machine. Already installed? Close Claude and run
60+
Self-contained build - no .NET required on the target machine. Already installed? Run
4861
``xpplens update --install`` (available from 1.2.2), or ``install.ps1`` from this package - your settings and
49-
index are kept.
62+
index are kept, Claude may stay open (from 1.2.5).
5063
5164
## Changes
5265

0 commit comments

Comments
 (0)