Skip to content

Commit 7306cce

Browse files
adamgellclaude
andcommitted
Merge branch 'v1' into main
Bring PR #232 (website apex-domain + releasing.md reconcile) onto main and retire v1. main already carried PR #231 (v1.0 README refresh); this combines both doc lines. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2 parents bbd28bf + 50c283f commit 7306cce

12 files changed

Lines changed: 97 additions & 78 deletions

File tree

.github/workflows/cmprojectx-docs.yml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ name: "CMProjectX: Docs"
44
# One-time setup: repo Settings → Pages → Source = "GitHub Actions".
55

66
on:
7-
# Auto-deploy is intentionally OFF while the docs are kept hidden.
8-
# Publish manually from the Actions tab → "Run workflow" (workflow_dispatch),
9-
# or un-comment the push trigger below to resume automatic publishing on merge.
10-
# push:
11-
# branches: [main]
12-
# paths:
13-
# - "website/**"
14-
# - ".github/workflows/cmprojectx-docs.yml"
7+
# Publishes intunecommander.com on every push to main that touches the site.
8+
# (Manual runs are still available from the Actions tab via workflow_dispatch.)
9+
push:
10+
branches: [main]
11+
paths:
12+
- "website/**"
13+
- ".github/workflows/cmprojectx-docs.yml"
1514
workflow_dispatch:
1615

1716
permissions:

website/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# IntuneCommander documentation site
22

33
Public docs for IntuneCommander, built with [Astro Starlight](https://starlight.astro.build) and
4-
deployed to GitHub Pages at **https://gellorg.github.io/intunecommander-src/**.
4+
deployed to GitHub Pages at **https://intunecommander.com**.
55

66
## Run it locally
77

88
```powershell
99
npm install # first time only
10-
npm run dev # http://localhost:4321/intunecommander-src
10+
npm run dev # http://localhost:4321/
1111
```
1212

13-
Before pushing, validate the production build under the real base path:
13+
Before pushing, validate the production build:
1414

1515
```powershell
1616
npm run build && npm run preview
@@ -30,9 +30,9 @@ scripts/redact.mjs screenshot redaction + export tool
3030

3131
- Pages live in `src/content/docs/`; the file path is the URL. Add a page, then list it in the
3232
`sidebar` in `astro.config.mjs`.
33-
- **Internal links:** write them root-absolute and base-less, e.g. `[Sign in](/sign-in/overview/)`.
34-
A rehype plugin in `astro.config.mjs` adds the `/intunecommander-src` base at build time. (Hero `actions`
35-
in `index.mdx` bypass Markdown, so the base is baked into those links by hand.)
33+
- **Internal links:** write them root-absolute, e.g. `[Sign in](/sign-in/overview/)`. The site is
34+
served at the domain root (`base: '/'`), so these resolve as-is. (If the site ever moves to a
35+
project Pages sub-path, the rehype plugin in `astro.config.mjs` prefixes the base at build time.)
3636
- **Components** (`<Steps>`, `<Tabs>`, `<Card>`, …) require an `.mdx` file; plain prose can be `.md`.
3737
Asides (`:::note`, `:::tip`, `:::caution`) work in both.
3838

website/astro.config.mjs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import starlight from '@astrojs/starlight';
44
import starlightLinksValidator from 'starlight-links-validator';
55

66
// IntuneCommander documentation — Astro Starlight.
7-
// Project (not user) GitHub Pages site: served under /intunecommander-src.
8-
// NOTE: `base` is case-sensitive and must equal the GitHub repo name exactly
9-
// (the repo that hosts these Pages — the source repo, gellorg/intunecommander-src).
10-
const base = '/intunecommander-src';
7+
// Served at the apex custom domain https://intunecommander.com (GitHub Pages +
8+
// public/CNAME), so the site lives at the domain root and `base` is '/'.
9+
// (If this ever moves to a project Pages path, set `base` to '/<repo-name>' and
10+
// the rehypeBaseLinks helper below will start prefixing content links again.)
11+
const base = '/';
1112

1213
/**
1314
* Prepend the site `base` to root-absolute internal links in Markdown/MDX content.
@@ -18,6 +19,9 @@ const base = '/intunecommander-src';
1819
* already-prefixed links.)
1920
*/
2021
function rehypeBaseLinks() {
22+
// At the domain root (`base === '/'`) there is nothing to prepend, and doing
23+
// so would turn `/x` into `//x` (a protocol-relative link). No-op in that case.
24+
if (base === '/') return () => {};
2125
/** @param {any} node */
2226
const walk = (node) => {
2327
if (node.type === 'element' && node.tagName === 'a') {
@@ -40,7 +44,7 @@ function rehypeBaseLinks() {
4044

4145
// https://astro.build/config
4246
export default defineConfig({
43-
site: 'https://gellorg.github.io',
47+
site: 'https://intunecommander.com',
4448
base,
4549
markdown: { rehypePlugins: [rehypeBaseLinks] },
4650
integrations: [
@@ -54,7 +58,7 @@ export default defineConfig({
5458
{
5559
icon: 'github',
5660
label: 'GitHub',
57-
href: 'https://github.com/gellorg/intunecommander-release',
61+
href: 'https://github.com/adamgell/IntuneCommander',
5862
},
5963
],
6064
// Fail the build on broken internal links. The interactive Redoc page is a
@@ -65,7 +69,7 @@ export default defineConfig({
6569
tag: 'meta',
6670
attrs: {
6771
property: 'og:image',
68-
content: 'https://gellorg.github.io/intunecommander-src/og.png',
72+
content: 'https://intunecommander.com/og.png',
6973
},
7074
},
7175
{
@@ -77,7 +81,7 @@ export default defineConfig({
7781
tag: 'meta',
7882
attrs: {
7983
name: 'twitter:image',
80-
content: 'https://gellorg.github.io/intunecommander-src/og.png',
84+
content: 'https://intunecommander.com/og.png',
8185
},
8286
},
8387
],

website/public/CNAME

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
intunecommander.com

website/src/content/docs/404.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ hero:
77
tagline: That page wandered off — let's get you back on track.
88
actions:
99
- text: Back to the docs
10-
link: /intunecommander-src/
10+
link: /
1111
variant: primary
1212
---

website/src/content/docs/changelog.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ _Prerelease._ First published build.
1616
audit/drift [time-machine](/using/time-machine/).
1717
- Bundled launcher (`Start-IntuneCommander.cmd`) starts the sidecar, then the client.
1818

19-
[Release notes ›](https://github.com/gellorg/intunecommander-release/releases/tag/v0.1.0)
19+
[Release notes ›](https://github.com/adamgell/IntuneCommander/releases/tag/v0.1.0)

website/src/content/docs/develop/releasing.md

Lines changed: 59 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,75 @@
11
---
22
title: Cutting a release
3-
description: How IntuneCommander releases are built and published — the repo layout and the local release script.
3+
description: How IntuneCommander releases are built, signed, and published — the tag-driven CI workflow, plus the local unsigned dev build.
44
---
55

6-
Releases are cut **locally** with a single PowerShell script. There is no GitHub Actions release
7-
workflow; the logic lives in one place a CI runner could also call.
6+
Official releases are cut by **CI**: push a `v<semver>` tag and the signed-release workflow builds,
7+
signs, and attaches the installers to a draft GitHub Release. A local script covers quick unsigned
8+
dev builds.
89

910
## Repo layout
1011

11-
IntuneCommander lives in two repositories:
12-
13-
| Repo | Visibility | Holds |
14-
| --- | --- | --- |
15-
| `gellorg/intunecommander-src` | private | the source (this repo + these docs) |
16-
| `gellorg/intunecommander-release` | private | published binaries + end-user docs (the [release channel](/get-started/download/)) |
12+
IntuneCommander is a single public repository —
13+
[`adamgell/IntuneCommander`](https://github.com/adamgell/IntuneCommander) — holding the source, these
14+
docs, and the published binaries on its [Releases](https://github.com/adamgell/IntuneCommander/releases)
15+
page (the [release channel](/get-started/download/)).
16+
17+
## Cut a signed release (CI)
18+
19+
The [**Signed Release (MSI + MSIX)**](https://github.com/adamgell/IntuneCommander/blob/main/.github/workflows/cmprojectx-codesign.yml)
20+
workflow is the source of truth. It runs on a version tag and produces a **signed MSI, a signed
21+
MSIX, and a portable zip for both `arm64` and `x64`**.
22+
23+
1. **Match the version.** Set `[package] version` in `app/Cargo.toml` to the release version (no
24+
leading `v`). CI fails fast if the tag and `Cargo.toml` disagree.
25+
2. **Tag and push.**
26+
27+
```powershell
28+
git tag v1.0.0-beta.1
29+
git push origin v1.0.0-beta.1
30+
```
31+
32+
Or run it manually from **Actions → Signed Release → Run workflow** with a version — the workflow
33+
creates the tag for you.
34+
3. **CI builds and signs.** For each architecture it builds the Rust/WinUI client, publishes the
35+
self-contained .NET sidecar, bundles the pinned Maester modules, then packages a **signed MSI +
36+
MSIX** with Master Packager Dev (Azure Trusted Signing) plus a portable zip. Build provenance is
37+
attested.
38+
4. **Publish the draft.** CI attaches every asset to a **draft** GitHub Release — a `-beta.N` tag is
39+
auto-marked *prerelease*. Review it and hit **Publish**.
40+
41+
:::note[Release notes]
42+
Drop curated notes at `docs/release-notes/<tag>.md` (for example `docs/release-notes/v1.0.0-beta.1.md`)
43+
and CI uses them for the release body; otherwise it writes a one-line fallback.
44+
:::
1745

18-
The build happens in the source repo; the artifacts are published to the release repo.
46+
:::caution[Signing & versions]
47+
Signing runs in the `codesigning` GitHub Environment. The Azure Trusted Signing identifiers are
48+
non-secret **variables**; only the client secret (and the optional `SYNCFUSION_LICENSE_KEY` for the
49+
Conditional Access → PowerPoint export) are secrets. Installer versions are 4-part numeric derived
50+
from the SemVer, so each beta cleanly upgrades the last — see
51+
[`packaging/README.md`](https://github.com/adamgell/IntuneCommander/blob/main/packaging/README.md).
52+
:::
1953

20-
## The release script
54+
## Local dev build (unsigned)
2155

22-
[`scripts/release.ps1`](https://github.com/gellorg/intunecommander-src/blob/main/scripts/release.ps1)
23-
(PowerShell 7+) is the "go script".
56+
For a quick local build without CI or signing,
57+
[`scripts/release.ps1`](https://github.com/adamgell/IntuneCommander/blob/main/scripts/release.ps1)
58+
(PowerShell 7+) builds the client + self-contained sidecar and stages a runnable, zipped bundle per
59+
architecture. Use `-DryRun` to keep the artifacts local — they land in `.\dist` and nothing is
60+
published:
2461

2562
```powershell
26-
# prerelease, x64 (the current target):
27-
.\scripts\release.ps1 -Version 0.2.0 -Arch x64
28-
29-
# build + package only, no publish (artifacts land in .\dist):
30-
.\scripts\release.ps1 -Version 0.2.0 -Arch x64 -DryRun
31-
32-
# stable (non-prerelease) release:
33-
.\scripts\release.ps1 -Version 1.0.0 -Arch x64 -Stable
63+
# both arches, unsigned, artifacts only (no GitHub release):
64+
.\scripts\release.ps1 -Version 1.0.0-beta.1 -DryRun
3465
```
3566

36-
For each architecture it:
67+
These builds are **unsigned** — use them for testing, not distribution. Signed, published releases
68+
always go through the CI workflow above.
3769

38-
1. builds the Rust/WinUI client + `dotnet publish`es the sidecar (self-contained, no `.pdb`);
39-
2. stages a runnable bundle (`IntuneCommander.exe`, `sidecar\`, `docs\`, `Start-IntuneCommander.cmd`, `VERSION`) and zips it;
40-
3. publishes a GitHub Release `v<Version>` to the release repo with the zips attached
41-
(`--prerelease` unless `-Stable`);
42-
4. syncs curated docs into the release repo.
43-
44-
## Prerequisites
45-
46-
- Run from a **full checkout**, not a git worktree — the Rust client has path dependencies on the
47-
sibling `windows-rs` and `cmtraceopen` checkouts, which must sit next to the repo root.
48-
- An **x64 MSVC build environment** (Visual Studio Build Tools 2022 — enter the dev shell before
49-
running) and the **.NET 10 preview SDK**.
50-
- An authenticated **`gh`** CLI.
51-
52-
The script preflights all of this and stops with a clear message if something's missing.
53-
54-
:::note[x64 only, for now]
55-
Builds currently target **win-x64**. ARM64 is the long-term primary target but needs the
56-
`aarch64-pc-windows-msvc` Rust target and the ARM64 VC tools installed first.
70+
:::note[Run from a full checkout]
71+
The Rust client has path dependencies on sibling `windows-rs` and `cmtraceopen` checkouts, which
72+
must sit next to the repo root — so build from a **full checkout, not a git worktree** (CI links
73+
these in automatically). You'll also need the **.NET 10 SDK** and the Rust toolchain with the
74+
`aarch64-pc-windows-msvc` / `x86_64-pc-windows-msvc` targets installed.
5775
:::
58-
59-
Key flags: `-Arch x64`, `-SelfContained`, `-Notes <text|file>`, `-Stable`, `-DryRun`, `-Force`,
60-
`-SkipDocsSync`, `-ReleaseRepoPath <path>`.

website/src/content/docs/get-started/download.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { LinkButton } from '@astrojs/starlight/components';
77

88
Most people don't need to build from source. Grab a prebuilt release, unzip it, and run.
99

10-
<LinkButton href="https://github.com/gellorg/intunecommander-release/releases" variant="primary" icon="external">
10+
<LinkButton href="https://github.com/adamgell/IntuneCommander/releases" variant="primary" icon="external">
1111
Releases
1212
</LinkButton>
1313

website/src/content/docs/get-started/install.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ Make sure you've installed everything on the [prerequisites](/get-started/prereq
1515
both repositories next to each other in the same parent folder:
1616

1717
```powershell
18-
git clone https://github.com/gellorg/intunecommander-src
18+
git clone https://github.com/adamgell/IntuneCommander
1919
git clone https://github.com/adamgell/cmtraceopen
20-
cd intunecommander-src
20+
cd IntuneCommander
2121
```
2222

2323
2. **Build the .NET sidecar.**
@@ -41,7 +41,7 @@ On a clean checkout, both the sidecar and the client compile without changes. Th
4141

4242
:::note[Why two clones?]
4343
`app/` references the CMTrace Open parser through a local path that expects `cmtraceopen` to sit
44-
beside `intunecommander-src`. Keep them as siblings and the workspace build resolves it automatically.
44+
beside `IntuneCommander`. Keep them as siblings and the workspace build resolves it automatically.
4545
:::
4646

4747
Next: [First run](/get-started/first-run/)

website/src/content/docs/index.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ hero:
77
image:
88
file: ../../assets/cmx-mark.svg
99
actions:
10-
# Hero actions bypass Markdown, so the base path is baked in here (see astro.config.mjs).
10+
# Hero actions bypass Markdown; links are root-absolute (site is served at the domain root).
1111
- text: Get started
12-
link: /intunecommander-src/get-started/prerequisites/
12+
link: /get-started/prerequisites/
1313
icon: right-arrow
1414
variant: primary
1515
- text: How sign-in works
16-
link: /intunecommander-src/sign-in/overview/
16+
link: /sign-in/overview/
1717
variant: minimal
1818
---
1919

0 commit comments

Comments
 (0)