Skip to content

Commit 0a5175f

Browse files
committed
Numbered decisions D-release-1 to D-release-4 as 127 to 130 for the merge into main
1 parent 8a2338c commit 0a5175f

9 files changed

Lines changed: 16 additions & 16 deletions

File tree

‎.github/workflows/release.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Publishes a release (decisions D-release-1 to D-release-4). For each Rock release in
1+
# Publishes a release (decisions 127 to 130). For each Rock release in
22
# release/rock-releases.json, it builds that Rock, writes every dataset's package, verifies them,
33
# and runs the publishing gate. It packs the loader NuGet package. Then, behind the
44
# "release" environment, it pushes the loader to nuget.org and uploads the packages, their receipts,
@@ -360,7 +360,7 @@ jobs:
360360
done
361361
362362
# A stable release updates index.json, and index-prerelease.json to match it. A prerelease
363-
# updates only index-prerelease.json: the stable index plus the prerelease (decision D-release-3).
363+
# updates only index-prerelease.json: the stable index plus the prerelease (decision 129).
364364
- name: Upload the package index
365365
shell: bash
366366
run: |

‎docs/decisions.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ This log wins over the [design spec](design-spec.md) wherever the two disagree.
2626
| 124 | 2026-10-21 | Each dataset manifest (`datasets/*.json`) holds its card for Rock's installer: a summary, what it is best for, two to four highlights, and its people, households, campuses, and typical install time, measured from real loads. The loader embeds the manifests, and `SampleDataDatasets` reads them. The builder refuses a manifest without a card, and the verify tool fails a default-seed load whose people or households differ from the card by more than 2%. | Rock's block shows every dataset before it downloads one, from the loader it already has. The card sits beside the settings that make the dataset, and verify keeps its numbers from going stale. |
2727
| 125 | 2026-10-21 | Steps are their own part, `Steps`, loaded after notes. Choosing steps loads small groups, serving teams, and giving too. The part holds both step programs, the Discipleship Path and the Student Path (decisions 115 to 119). The Student Path's student check-ins come from the attendance plan, not the attendance rows, so steps do not need the attendance part. Steps plan only when they load, and Cast step stories, the students' among them, are checked only when steps loaded. | Steps are a feature a person can want or not, like prayer or notes. Each Small Group, Serve, and Lead step copies a membership that small groups or serving wrote, open requests to serve come from serving, and each Give step must agree with the journey stage giving writes. So a step needs those rows to be true, which widens the rule in decision 121 from rows that point at another part's rows to rows that must agree with them. The attendance plan holds exactly the check-ins the attendance step writes, so the student steps are the same as in a full load whether or not attendance loads, and choosing steps does not also force attendance. Without attendance, Rock shows student steps without the check-ins behind them, the way adult steps already count family Sundays from the plan. Nothing after steps reads them, so leaving them out changes no other part. |
2828
| 126 | 2026-10-22 | The building campaign (decision 109) is church setup, not a part. Its fund, campus accounts, campaign dates, Create Pledge page, and statement template settings load with configuration in every load. The fund's goal, written into its description from the planned pledges, is written in every load too. The pledges and campaign gifts, the Cast's (decisions 110 to 112) and the Crowd's and businesses' (decisions 113 and 114), belong to the Giving part. They are written in the Giving step, not a step or part of their own, and the Cast's campaign stories are checked only when giving loaded. All pledges are planned in every load, before giving is planned. | A fund, its accounts, and page settings are setup a church has before anyone gives, like the funds and campus accounts that already load with configuration. A person who leaves out giving still gets a Create Pledge page that works. Pledges and campaign gifts are giving records. Most campaign gifts are a line on a usual gift, so they cannot load without giving, and a pledge without its gifts would show every pledger as not started. Planning the pledges in every load keeps the giving plan the same, so prayer, which reads that plan, does not change when giving is left out. It also keeps the fund the same in every load, since its goal comes from the pledged total. The generated pledgers are drawn from the giving patterns people carry, which always load, so the draw needs no other part. No other part reads pledge rows. |
29-
| D-release-1 | 2026-10-21 | Releases are built by the release workflow (`.github/workflows/release.yml`), never on a developer's machine. For each Rock release in `release/rock-releases.json`, it checks out that Rock from SparkDevNetwork/Rock (a release tag, or a pinned commit before Rock tags it), builds it with Visual Studio's MSBuild, starts SQL Server, writes every dataset's package, runs the verify tool, and runs the publishing gate. A version tag (`v1.0.0`) publishes. A manual run is a dry run unless it is on `main` and asks to publish. | Each package is for one exact Rock (decision 52), so one release covers every supported Rock. A clean machine for every run means a package never depends on what a developer had built or installed. |
30-
| D-release-2 | 2026-10-21 | Published files never change. A release uploads each package and its receipt to `sampledata/packages/v{version}/rock-{Rock version}/`, cached for a year. A re-run skips a file already there with the same bytes and stops at one with other bytes. The index, `sampledata/packages/index.json`, is merged and uploaded last, cached for 5 minutes. It lists each dataset once per Rock version: a release replaces the entry for the same dataset and Rock, and entries for other Rocks stay. | Every package URL can be cached forever, a failed run can simply be run again, and no one sees a package in the index before its file exists. Older packages keep working at their own paths after the index moves on. |
31-
| D-release-3 | 2026-10-21 | A prerelease tag (`v1.1.0-beta.1`) publishes the loader as a NuGet prerelease and uploads its packages, but changes only `packages/index-prerelease.json`: the stable index plus the prerelease. A stable release writes both indexes. | Rock's installer block reads `index.json`, so a church never gets a prerelease. Testers point the block at the prerelease index instead. |
32-
| D-release-4 | 2026-10-21 | Publishing stores no secrets. The publish job runs in the `release` GitHub environment, which needs a person's approval and allows only `main` and `v*` tags. It signs in to nuget.org with trusted publishing, and to Azure with OpenID Connect as an identity that trusts only that environment and whose only role is Storage Blob Data Contributor on the `sampledata` container. | There is no key to leak, rotate, or expire. The identity can write only sample data, and a person approves every publish. |
29+
| 127 | 2026-10-21 | Releases are built by the release workflow (`.github/workflows/release.yml`), never on a developer's machine. For each Rock release in `release/rock-releases.json`, it checks out that Rock from SparkDevNetwork/Rock (a release tag, or a pinned commit before Rock tags it), builds it with Visual Studio's MSBuild, starts SQL Server, writes every dataset's package, runs the verify tool, and runs the publishing gate. A version tag (`v1.0.0`) publishes. A manual run is a dry run unless it is on `main` and asks to publish. | Each package is for one exact Rock (decision 52), so one release covers every supported Rock. A clean machine for every run means a package never depends on what a developer had built or installed. |
30+
| 128 | 2026-10-21 | Published files never change. A release uploads each package and its receipt to `sampledata/packages/v{version}/rock-{Rock version}/`, cached for a year. A re-run skips a file already there with the same bytes and stops at one with other bytes. The index, `sampledata/packages/index.json`, is merged and uploaded last, cached for 5 minutes. It lists each dataset once per Rock version: a release replaces the entry for the same dataset and Rock, and entries for other Rocks stay. | Every package URL can be cached forever, a failed run can simply be run again, and no one sees a package in the index before its file exists. Older packages keep working at their own paths after the index moves on. |
31+
| 129 | 2026-10-21 | A prerelease tag (`v1.1.0-beta.1`) publishes the loader as a NuGet prerelease and uploads its packages, but changes only `packages/index-prerelease.json`: the stable index plus the prerelease. A stable release writes both indexes. | Rock's installer block reads `index.json`, so a church never gets a prerelease. Testers point the block at the prerelease index instead. |
32+
| 130 | 2026-10-21 | Publishing stores no secrets. The publish job runs in the `release` GitHub environment, which needs a person's approval and allows only `main` and `v*` tags. It signs in to nuget.org with trusted publishing, and to Azure with OpenID Connect as an identity that trusts only that environment and whose only role is Storage Blob Data Contributor on the `sampledata` container. | There is no key to leak, rotate, or expire. The identity can write only sample data, and a person approves every publish. |
3333

3434
## Time
3535

‎docs/glossary.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ The words this project uses, in alphabetical order.
3434
| **Mass send** | An email, text, or push sent to 25 or more people at once. Calibration part 7 measures them. |
3535
| **Opportunity** | One way to serve that people can ask about, such as Greeter. Each opportunity places people on its serving team. |
3636
| **Package** | A zip the builder writes for one dataset and one exact Rock: data files only, never SQL, with a checksum for every file in `package.json`. |
37-
| **Package index** | `index.json`, the hosted list of packages that Rock's installer block reads, at `storage.rockrms.com/sampledata/packages/`. The release workflow merges each release into it and uploads it last (decision D-release-2). |
37+
| **Package index** | `index.json`, the hosted list of packages that Rock's installer block reads, at `storage.rockrms.com/sampledata/packages/`. The release workflow merges each release into it and uploads it last (decision 128). |
3838
| **Pending** | A team member who has connected but is not serving yet. The team leader makes them Active after onboarding. The scheduler only schedules Active members. |
3939
| **Persona** | A behavior pattern, such as a weekly giver or a holiday-only attender. |
4040
| **Pledge** | A promise to give a total to a fund over set dates, with an optional frequency. Rock's Pledge Analytics compares it with what the giving unit gave. |
@@ -43,7 +43,7 @@ The words this project uses, in alphabetical order.
4343
| **Position** | A room a serving team serves in, with a minimum, desired, and maximum number of people at each service. |
4444
| **Profile** | The blended target numbers the builder uses, in `calibration/profiles/`. |
4545
| **Relative date** | A date stored as `yearsAgo` plus a month and day, or as `daysAgo`, instead of a fixed date. |
46-
| **Release workflow** | `.github/workflows/release.yml`. On a version tag it builds, verifies, and publishes every package for every supported Rock, and pushes the loader to nuget.org (decision D-release-1). |
46+
| **Release workflow** | `.github/workflows/release.yml`. On a version tag it builds, verifies, and publishes every package for every supported Rock, and pushes the loader to nuget.org (decision 127). |
4747
| **Rhythm step** | A step that is a habit, such as being in a small group or giving. It starts and can stop. A milestone step happens once, such as baptism. See [Steps](steps.md). |
4848
| **Rotation** | How often a volunteer serves: one of Rock's four schedule templates (every week, every other week, 1st and 3rd, or 2nd and 4th). |
4949
| **Seed** | The text every random choice starts from. The same seed and anchor give the same data. |

‎docs/maintaining.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ Tests and documentation rely on Cast people. Treat a change like a code change:
120120

121121
## Publishing a release
122122

123-
The release workflow, `.github/workflows/release.yml`, publishes everything (decisions D-release-1 to D-release-4). It has four jobs:
123+
The release workflow, `.github/workflows/release.yml`, publishes everything (decisions 127 to 130). It has four jobs:
124124

125125
| Job | Where | What it does |
126126
|---|---|---|
@@ -144,7 +144,7 @@ A run without "publish" stops after the first three jobs. That is a dry run.
144144

145145
4. Approve the Publish job when GitHub asks.
146146

147-
A tag with a label, such as `v1.1.0-beta.1`, is a prerelease. NuGet lists the loader as a prerelease, and only `packages/index-prerelease.json` changes (decision D-release-3). To try one in Rock, point the installer block at `https://storage.rockrms.com/sampledata/packages/index-prerelease.json`.
147+
A tag with a label, such as `v1.1.0-beta.1`, is a prerelease. NuGet lists the loader as a prerelease, and only `packages/index-prerelease.json` changes (decision 129). To try one in Rock, point the installer block at `https://storage.rockrms.com/sampledata/packages/index-prerelease.json`.
148148

149149
A manual run can also publish: run it on `main`, give a version, and tick "publish". Use this when a tag's run failed for a reason outside the repository. A run that failed partway can be run again: files already uploaded with the same bytes are skipped, and a version already on nuget.org is skipped.
150150

‎docs/roadmap.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ Where the project stands: the team's working list. Update this page whenever som
4040

4141
- **The Sample Data Installer block in Rock**, built in the Rock repository against the loader package. It shows Core 1, Core 3, and Full 7 as cards from the dataset catalog and downloads the chosen package from a hosted `index.json`, beside the old sample data block.
4242
- **Communications** (decisions 90 to 96; see [Communications](communications.md)). Email, texts, and push with very large mass sends, opens and clicks, SMS conversations, one-to-one messages, and messages tied to steps. Slice 1 is done: the design, calibration part 7, and the church app stub. Source-1 has run part 7, and its communication shapes are in the profile. Next: the setup slice.
43-
- **The release workflow** (decisions D-release-1 to D-release-4; see [Publishing a release](maintaining.md#publishing-a-release)). `.github/workflows/release.yml` builds each Rock release in `release/rock-releases.json`, writes and verifies every package, and runs the publishing gate. On a version tag it pushes the loader to nuget.org and uploads the packages, receipts, and index to Azure, the index last. A dry run on GitHub's `windows-2025` runner on 2026-10-22 built Rock 21.0.2, ran SQL Server 2025, passed verify on all three packages, and passed the gate. Its Packages job took 66 minutes (about 30 to build Rock, 6 for SQL Server, and 28 for verify). A self-hosted runner stays a fallback. The one-time setup in [Maintaining](maintaining.md#one-time-setup) is done (2026-10-22): the Azure identity and its role, nuget.org trusted publishing for `SparkDevNetwork.Rock.SampleData.Loader`, and the `release` environment with its approvers and variables. What is left:
43+
- **The release workflow** (decisions 127 to 130; see [Publishing a release](maintaining.md#publishing-a-release)). `.github/workflows/release.yml` builds each Rock release in `release/rock-releases.json`, writes and verifies every package, and runs the publishing gate. On a version tag it pushes the loader to nuget.org and uploads the packages, receipts, and index to Azure, the index last. A dry run on GitHub's `windows-2025` runner on 2026-10-22 built Rock 21.0.2, ran SQL Server 2025, passed verify on all three packages, and passed the gate. Its Packages job took 66 minutes (about 30 to build Rock, 6 for SQL Server, and 28 for verify). A self-hosted runner stays a fallback. The one-time setup in [Maintaining](maintaining.md#one-time-setup) is done (2026-10-22): the Azure identity and its role, nuget.org trusted publishing for `SparkDevNetwork.Rock.SampleData.Loader`, and the `release` environment with its approvers and variables. What is left:
4444
- The first real release, to prove the Publish job.
4545
- Change the Rock 21.0.2 entry from a develop commit to its tag once Rock tags it.
4646

‎loader/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ The two builds are meant to load the same rows. One difference is expected: .NET
133133

134134
## The package index
135135

136-
The hosted list of packages is `index.json` (decision 123). The [release workflow](../docs/maintaining.md#publishing-a-release) merges each release into it and uploads it last, at `https://storage.rockrms.com/sampledata/packages/index.json`, beside the versioned packages (decision D-release-2). A prerelease changes only `index-prerelease.json` beside it (decision D-release-3). `SampleDataPackageIndex.Parse` reads it, and it refuses text that is not JSON, another format version, or an entry without a required field.
136+
The hosted list of packages is `index.json` (decision 123). The [release workflow](../docs/maintaining.md#publishing-a-release) merges each release into it and uploads it last, at `https://storage.rockrms.com/sampledata/packages/index.json`, beside the versioned packages (decision 128). A prerelease changes only `index-prerelease.json` beside it (decision 129). `SampleDataPackageIndex.Parse` reads it, and it refuses text that is not JSON, another format version, or an entry without a required field.
137137

138138
```json
139139
{

‎release/README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ What the release workflow, `.github/workflows/release.yml`, reads and runs. How
44

55
| File | What it is |
66
|---|---|
7-
| `rock-releases.json` | The Rock releases each release builds packages for, each with the tag or commit to check out from SparkDevNetwork/Rock (decision D-release-1). |
8-
| `merge-index.js` | Merges one release's verified packages into the hosted `index.json` (decision D-release-2). |
7+
| `rock-releases.json` | The Rock releases each release builds packages for, each with the tag or commit to check out from SparkDevNetwork/Rock (decision 127). |
8+
| `merge-index.js` | Merges one release's verified packages into the hosted `index.json` (decision 128). |
99

1010
## Trying the index merge
1111

‎release/merge-index.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
/*
1919
Merges one release's packages into the hosted package index, index.json. The format is in the loader
2020
README, under "The package index". The release workflow runs it after every package passed the
21-
publishing gate, and uploads the result last (decision D-release-2).
21+
publishing gate, and uploads the result last (decision 128).
2222
2323
Usage:
2424
node release/merge-index.js --packages <folder> --version 1.2.0 --out <new index.json>

‎release/rock-releases.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"$comment": "The Rock releases the release workflow builds packages for (decision D-release-1). Each package is for one exact Rock (decision 52), so the workflow checks out each ref from SparkDevNetwork/Rock, builds it, writes and verifies every dataset's package for it, and publishes them under packages/v{tag}/rock-{version}/. 'ref' is a release tag once Rock tags the release, or a full commit hash before then. The workflow refuses a ref whose Directory.Build.props has a different version.",
2+
"$comment": "The Rock releases the release workflow builds packages for (decision 127). Each package is for one exact Rock (decision 52), so the workflow checks out each ref from SparkDevNetwork/Rock, builds it, writes and verifies every dataset's package for it, and publishes them under packages/v{tag}/rock-{version}/. 'ref' is a release tag once Rock tags the release, or a full commit hash before then. The workflow refuses a ref whose Directory.Build.props has a different version.",
33
"releases": [
44
{
55
"version": "21.0.2",

0 commit comments

Comments
 (0)