Skip to content

Commit f3b22b6

Browse files
authored
Add the public documentation and VS Code 1.0.1 (#29)
The landing page links a guide, a shortcuts reference, and the `.wimport` contract. Release-management now starts with what to run, then how the pipelines work. The VS Code extension is 1.0.1: it treats `.wimport` as Markdown and recommends itself from the repository and from `docs/samples`. Whiteboard VersionPrefix is unchanged.
1 parent e1f5a42 commit f3b22b6

16 files changed

Lines changed: 777 additions & 222 deletions

File tree

.vscode/extensions.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"recommendations": [
3+
"sqlbi.sqlbi-whiteboard"
4+
]
5+
}

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"files.associations": {
3+
"*.wimport": "markdown"
4+
}
5+
}

README.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,14 @@ running when the artwork changes.
107107

108108
`.azure/pipelines/build-whiteboard.yaml` performs the same build in Azure Pipelines and
109109
signs the binaries and both MSI packages with the SQLBI certificate held in Azure Key Vault.
110+
What to run for a pre-release, a full release, the VS Code extension, or the site is the
111+
opening section of [docs/release-management.md](docs/release-management.md).
110112

111113
## Landing page
112114

113-
`site/` is the landing page for <https://whiteboard.sqlbi.com>, and is self-contained: one
114-
HTML file plus the generated favicons and social card.
115+
`site/` is <https://whiteboard.sqlbi.com>: the download landing page plus the public
116+
guide, shortcuts, and `.wimport` contract. Styles live in `site/styles.css`. Pages are
117+
hand-authored HTML, not generated from this README.
115118

116119
`.github/workflows/publish-site.yml` deploys it to GitHub Pages whenever `site/` changes on
117120
`main`. `site/CNAME` carries the custom domain so it survives each deployment. Asset paths
@@ -213,9 +216,9 @@ The full contract for authors and agents is [docs/wimport.md](docs/wimport.md).
213216

214217
Plain `.md` files are not imported.
215218

216-
A `.wboard` in the same tree opens as the embedded preview if the extension in
217-
`vscode/sqlbi-whiteboard` is installed. Marketplace listing is still outstanding; that
218-
folder's README has the local VSIX steps.
219+
A `.wboard` in the same tree opens as the embedded preview if
220+
[SQLBI Whiteboard for VS Code](https://marketplace.visualstudio.com/items?itemName=sqlbi.sqlbi-whiteboard)
221+
is installed. The source is `vscode/sqlbi-whiteboard`.
219222

220223
## Architecture
221224

TODO.md

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,12 @@ The released installer registers a Native AOT in-process thumbnail handler that
5959
The pre-release channel does not register `.wboard`, so it does not register the handler
6060
either.
6161

62-
### 6. Preview of `.wboard` files in VS Code
62+
### 6. Preview of `.wboard` files in VS Code — done
6363

64-
The extension lives in `vscode/sqlbi-whiteboard/`. It opens a `.wboard` file as the embedded
65-
`preview.png` rather than as an archive. Marketplace listing is still outstanding — until then
66-
install from a local VSIX as described in that folder's README.
64+
`sqlbi.sqlbi-whiteboard` on the Marketplace opens a `.wboard` file as the embedded
65+
`preview.png`. The source is `vscode/sqlbi-whiteboard/`. Boards without a preview show a
66+
short message. Bump that folder's `package.json` version to ship an update; GitHub Actions
67+
publishes it. The desktop installer does not carry the extension.
6768

6869
### 7. Video teaser
6970

@@ -75,19 +76,12 @@ all need, so it sits on the critical path for all three.
7576
Here rather than earlier because it should show the 1.0 UI, including the configuration dialog
7677
and drag and drop.
7778

78-
### 8. Documentation on whiteboard.sqlbi.com
79+
### 8. Documentation on whiteboard.sqlbi.com — done
7980

80-
The site is a download page today. It needs real documentation: the tool set, containers,
81-
LiveView, the DAX and SQL Server text containers, the import format, and the keyboard and pen
82-
shortcuts. The README already carries most of this content, so the open question is whether the
83-
site renders from those files or keeps its own copy — decide that before writing the pages
84-
twice. The `.wimport` contract for authors and agents is already written in
85-
[docs/wimport.md](docs/wimport.md); publish that file rather than rewriting it.
86-
87-
The pages should also spell out user stories, not only what each control does. Features that
88-
look small in a reference list are the ones people miss in a live session. One to write up:
89-
copying a LiveView and pasting it produces a bitmap of the last frame, which is how you freeze
90-
a screenshot onto the board during an interactive explanation without leaving the whiteboard.
81+
The landing page stays the download. Guide, shortcuts, and the `.wimport` contract are
82+
separate pages under `site/`, linked from the nav. The site is hand-authored HTML, not
83+
generated from the README. `docs/wimport.md` remains the in-repo contract; `site/wimport.html`
84+
is the same grammar for the public site.
9185

9286
### 9. Microsoft Store
9387

docs/release-management.md

Lines changed: 88 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,33 @@ How the project is built, packaged, and shipped. The reasoning behind these choi
66
Sections marked **Not yet built** describe an agreed design that does not exist in the
77
repository yet.
88

9+
## What to run
10+
11+
Day-to-day shipping is a merge, plus one of the GitHub Actions below when the merge is not
12+
enough (a retry, or a deploy that has no new commit). Pull request validation runs by
13+
itself. Do not run it to “release” anything.
14+
15+
| You want to | Do this |
16+
| --- | --- |
17+
| Land a change | Open a pull request against `main`. The **Pull request** Action builds and tests; merge when it is green. |
18+
| Ship a Whiteboard pre-release | Merge to `main` (anything except `docs/`, `site/`, `vscode/`, and top-level markdown). Azure Pipelines **SQLBI Whiteboard** signs and publishes the GitHub prerelease. To rebuild an existing commit: Azure DevOps → that pipeline → **Run pipeline**. Do not use **Re-run**. |
19+
| Promote that build to a full release | Approve the **Release** stage of the same Azure run. Nothing is rebuilt. |
20+
| Ship a VS Code extension update | Bump `version` in `vscode/sqlbi-whiteboard/package.json` in a pull request and merge. The **Publish VS Code extension** Action publishes `sqlbi.sqlbi-whiteboard` if that version is not already on the Marketplace. To retry: Actions → **Publish VS Code extension****Run workflow**. |
21+
| Update whiteboard.sqlbi.com | Merge a change under `site/`. The **Publish site** Action deploys. To retry: Actions → **Publish site****Run workflow**. |
22+
| Rebuild brand assets | Run `scripts/build-assets.ps1` locally. Only when the artwork changes. |
23+
24+
The three GitHub Actions live under **Actions** in this repository. Their names are
25+
**Pull request**, **Publish VS Code extension**, and **Publish site**. The signed
26+
Whiteboard pipeline is not a GitHub Action; it stays in Azure DevOps because of the
27+
certificate (decision 3).
28+
29+
Version numbers are reviewed in pull requests, not typed into a pipeline UI.
30+
Whiteboard's version is `VersionPrefix` in `Directory.Build.props`. The VS Code
31+
extension's version is `version` in `vscode/sqlbi-whiteboard/package.json`. They move
32+
independently.
33+
34+
---
35+
936
## Day to day
1037

1138
`main` is protected. Work on short-lived branches and merge through a pull request — the
@@ -68,42 +95,50 @@ powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\build-assets.ps1
6895
Colours live in two places that must be changed together: the SVG, and
6996
`tools/AssetGenerator/Program.cs`.
7097

71-
## Pull request validation
98+
---
99+
100+
## How it works
72101

73-
`.github/workflows/pull-request.yml` runs on every pull request against `main`:
102+
### GitHub Actions
103+
104+
Three workflows in `.github/workflows/`. None of them see the EV certificate. Logs are
105+
public, so they must not print tokens.
106+
107+
**Pull request** (`.github/workflows/pull-request.yml`) runs on every pull request against
108+
`main`, and can be started by hand if a check needs repeating:
74109

75110
- **Build and test** — restores, builds the solution in Release, and runs the Core smoke
76-
tests. `TreatWarningsAsErrors` means a warning fails it.
111+
tests. A warning fails it.
77112
- **Build installers** — runs `scripts/build-installer.ps1` unsigned, so WiX authoring
78-
errors surface here rather than at release time. The output is discarded.
113+
errors surface here rather than at release time. The output is discarded. It builds a
114+
diagonal pair of variants, framework-dependent, which is enough to walk every `<?if?>` in
115+
the WiX source.
79116
- **VS Code extension** — compiles and tests `vscode/sqlbi-whiteboard` when that tree
80117
changed.
81118

82-
It signs nothing and publishes nothing. Everything that touches the certificate stays in
83-
Azure Pipelines, because this repository is public and so are these logs (decision 3).
84-
85-
Running on GitHub also means it works for pull requests from forks, which have no access to
86-
secrets and need none.
119+
Fork pull requests get the same jobs and no secrets.
87120

88-
## VS Code extension publishing
121+
**Publish VS Code extension** (`.github/workflows/publish-vscode-extension.yml`) publishes
122+
`vscode/sqlbi-whiteboard` as `sqlbi.sqlbi-whiteboard`. It runs when that extension's
123+
`package.json` lands on `main`, and on **Run workflow**. It packages, then publishes only
124+
when `version` is not already on the Marketplace, so a description-only edit does not
125+
republish. It does not rewrite the version.
89126

90-
`.github/workflows/publish-vscode-extension.yml` publishes `vscode/sqlbi-whiteboard` to
91-
the Visual Studio Marketplace as `sqlbi.sqlbi-whiteboard`. It does not touch the EV
92-
certificate.
127+
The repository secret `VSCE_PAT` is a Marketplace **Manage** personal access token with
128+
organization **All accessible organizations**. Create it in the Azure DevOps organization
129+
tied to the `sqlbi` publisher, then add it under the GitHub repo **Settings → Secrets and
130+
variables → Actions**. Forks never receive it.
93131

94-
It runs on a push to `main` that changes that extension's `package.json`, and on
95-
**Run workflow**. It packages, then publishes only when `package.json` `version` is not
96-
already on the Marketplace. Bump that version in a pull request to ship; do not let CI
97-
rewrite it.
132+
**Publish site** (`.github/workflows/publish-site.yml`) deploys `site/` to GitHub Pages
133+
when that tree changes on `main`, and on **Run workflow**. It needs **Settings → Pages →
134+
Source: GitHub Actions**. `site/CNAME` carries the custom domain.
98135

99-
The repository secret `VSCE_PAT` must be a Marketplace **Manage** personal access token
100-
with organization **All accessible organizations**. Create it in the Azure DevOps
101-
organization tied to the `sqlbi` publisher, then add it under the GitHub repo
102-
**Settings → Secrets and variables → Actions**.
136+
### Azure Pipelines
103137

104-
## The pipeline
105-
106-
`.azure/pipelines/build-whiteboard.yaml`, in the `SQLBI Whiteboard` Azure DevOps project.
138+
`.azure/pipelines/build-whiteboard.yaml`, in the `SQLBI Whiteboard` Azure DevOps project,
139+
is the only place that signs. A merge to `main` starts it unless the change is only
140+
`docs/`, `site/`, `vscode/`, `.github/`, or top-level markdown. It can also be started with
141+
**Run pipeline**.
107142

108143
Parameters:
109144

@@ -112,53 +147,53 @@ Parameters:
112147
| `verbosity` | `normal` | MSBuild verbosity |
113148
| `sign` | on | Code sign binaries and MSIs |
114149

115-
Two variable groups supply its settings; both must be authorised for the pipeline before it
116-
can run. The signing group's contents are described in decision 1 and held by the
117-
maintainers.
150+
Two variable groups must be authorised for the pipeline. Their contents stay in Azure
151+
DevOps, not in this repository:
118152

119-
The version is **not** among them: it comes from `VersionPrefix` in `Directory.Build.props`
120-
(decision 8). `AppVersionMajor`, `AppVersionMinor` and `AppVersionPatch` are obsolete and
121-
can be removed from the `SQLBI.Whiteboard` group.
153+
- **SQLBI-CodeSigning** — vault URL, tenant, client, secret, certificate name (decision 1).
154+
- **SQLBI.Whiteboard** — product settings. The version is not among them.
122155

123156
Signing uses `AzureSignTool` against the certificate in Azure Key Vault.
124157

125-
> **When adding a new first-party project, add its assembly to the signing step.** The
126-
> installer harvests new files automatically, so an unsigned assembly ships silently
127-
> beside a signed executable. This has already happened once.
158+
> **When adding a new first-party assembly, add it to the signing step.** The installer
159+
> harvests new files automatically, so an unsigned assembly ships silently beside a signed
160+
> executable. This has already happened once. The VS Code extension is not an assembly and
161+
> is not signed here.
162+
163+
Stages: **Build** produces every installer variant, **PreRelease** publishes the
164+
pre-release channel to GitHub, **Release** is gated by approvals on the
165+
`whiteboard-release` environment and uploads the released-channel installers **that the
166+
same run already produced** (decision 9).
128167

129-
To run it: **Run pipeline**, set parameters, **Run**. Do not use **Re-run** to pick up a
130-
fix — that replays the original commit.
168+
Creating a GitHub Release uses the `sql-bi write assets` service connection
169+
(`contents: write`).
131170

132-
## Versioning
171+
### Versioning
133172

134-
`VersionPrefix` in `Directory.Build.props` is the only place the product version is written.
135-
Everything else derives from it:
173+
`VersionPrefix` in `Directory.Build.props` is the only place the **desktop** product
174+
version is written. Everything in the installer derives from it:
136175

137176
- assemblies are stamped `major.minor.<days since 2000-01-01>.<seconds since midnight / 2>`,
138177
the algorithm MSBuild and the Bravo pipeline use, so every matrix job in a run stamps the
139178
same number;
140179
- the informational version is the plain `major.minor.patch`;
141180
- artifact and installer file names use it directly.
142181

143-
Releasing therefore starts with a pull request that changes one line.
182+
The VS Code extension does not read `VersionPrefix`.
144183

145-
## Releasing
184+
### Releasing
146185

147-
**Not yet built.** The agreed shape:
186+
The agreed shape, now in use for the pre-release path:
148187

149-
1. Every push to `main` builds, signs, and publishes the pre-release channel to a GitHub
150-
prerelease automatically. Pull requests build unsigned and publish nothing.
151-
2. A maintainer bumps the version in a pull request. Once merged, that build carries the
152-
release version.
153-
3. Promotion is an approval on a Release stage of that run. It publishes the **already-built
154-
released-channel artifacts from the same run** — nothing is rebuilt (decision 9).
188+
1. A maintainer bumps `VersionPrefix` in a pull request when the number should change.
189+
2. The merge to `main` builds, signs, and publishes the pre-release channel to a GitHub
190+
prerelease.
191+
3. Promotion is an approval on the Release stage of **that** run. It publishes the
192+
already-built released-channel artifacts — nothing is rebuilt.
155193
4. winget submission and the Store submission follow from the published release, in
156-
parallel; neither gates the download being available.
157-
158-
Until it exists, releasing means running the pipeline manually and uploading artifacts by
159-
hand.
194+
parallel, once those pieces exist. Neither gates the download being available.
160195

161-
## Still to build
196+
### Still to build
162197

163198
Roughly in dependency order:
164199

@@ -167,7 +202,7 @@ Roughly in dependency order:
167202
2. Add winget submission triggered by a published release.
168203
3. MSIX packaging and Store submission (decision 13).
169204

170-
## Verification before a public release
205+
### Verification before a public release
171206

172207
The build, signing, and publishing chain is proven (see above). What has **not** been done
173208
for a real release is everything that involves installing the result.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"recommendations": [
3+
"sqlbi.sqlbi-whiteboard"
4+
]
5+
}

docs/samples/.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"files.associations": {
3+
"*.wimport": "markdown"
4+
}
5+
}

docs/wimport.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# `.wimport` format for authors and agents
22

33
Read this file before writing a `.wimport`. It is the contract SQLBI Whiteboard implements.
4-
The site documentation (TODO item 8) should publish this same file rather than a second copy.
4+
The public edition is [whiteboard.sqlbi.com/wimport.html](https://whiteboard.sqlbi.com/wimport.html). Keep the two in step.
55

66
A `.wimport` file is a Markdown **recipe**. Whiteboard imports it as image and text
77
containers. It is not a board file. There is no export back to `.wimport`. After import the
@@ -14,6 +14,10 @@ renderer. Associate the extension if the editor does not treat it as Markdown:
1414
"files.associations": { "*.wimport": "markdown" }
1515
```
1616

17+
A folder of recipes can ship that association in `.vscode/settings.json`, and recommend
18+
`sqlbi.sqlbi-whiteboard` in `.vscode/extensions.json` so `.wboard` files open as the
19+
embedded preview. This repository and `docs/samples` both do that.
20+
1721
## Produce this
1822

1923
- Extension: `.wimport` (not `.md`, not `.imp`).

0 commit comments

Comments
 (0)