Skip to content

Commit bc7f189

Browse files
docs(release): require GitHub Release before App Store for public app repos
- ready2publish/APPSTORE-RELEASE.md: §7 GitHub (required), §8 upload; checklist - arbeitszeitcheck/release: reorder §6/7, gh paths from build/release, checklist - release/README: GitHub Release no longer optional for this workflow Made-with: Cursor
1 parent fb405d0 commit bc7f189

2 files changed

Lines changed: 32 additions & 39 deletions

File tree

release/APPSTORE-RELEASE.md

Lines changed: 31 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -116,70 +116,62 @@ Produces `arbeitszeitcheck-X.Y.Z.tar.gz.asc` — **ignored** by git.
116116

117117
---
118118

119-
## 6. Upload at apps.nextcloud.com
119+
## 6. GitHub Release (**required**) — **`nextcloud-arbeitszeitcheck`**
120120

121-
Typical fields:
122-
123-
| Field | Source |
124-
|--------|--------|
125-
| **Archive** | `build/release/arbeitszeitcheck-X.Y.Z.tar.gz` |
126-
| **SHA-256** | From `sha256sum` / `CHECKSUMS-X.Y.Z.txt` |
127-
| **Signature** | Output of the `openssl dgst … \| openssl base64` command |
128-
| **Changelog** | Paste from `CHANGELOG.md` (or shortened) |
129-
130-
Submit; fix any validation errors (wrong checksum/signature almost always means a wrong file or stale copy).
131-
132-
---
133-
134-
## 7. GitHub release — **standalone app repo** (not the monorepo)
135-
136-
User-facing downloads and release tags belong on **`nextcloud-arbeitszeitcheck`** (the **only** public first-party app repo — see [REPOSITORY-LAYOUT.md](../../../ready2publish/REPOSITORY-LAYOUT.md)), not on the private development monorepo.
121+
You **must** create a **GitHub Release** tagged **`vX.Y.Z`** and attach **`arbeitszeitcheck-X.Y.Z.tar.gz`** before you treat the App Store upload as complete. The SHA-256, OpenSSL signature, and store upload **must** be the **same byte-identical** file as the release asset. User-facing downloads and tags belong on the **public** app repo, not on the private monorepo.
137122

138123
| Repository | Role |
139124
|------------|------|
140-
| **This workspace** (`nextcloud-development` or e.g. `nextcloud-dev`, …) | Day-to-day development; **do not** create product releases here unless you explicitly want a monorepo release. |
141-
| **`aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`** | **Public** ArbeitszeitCheck repo — tags, GitHub Releases, and the `.tar.gz` asset users expect. |
125+
| **This workspace** (`nextcloud-development`, …) | Development; tarball is built under `apps/arbeitszeitcheck/build/release/`. |
126+
| **`aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`** | **Public** — source sync + **GitHub Releases** + `.tar.gz` asset. |
142127

143-
**Canonical GitHub repo for releases**
128+
**Canonical repo:** https://github.com/aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck
144129

145-
- `https://github.com/aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`
146-
- Shorthand for `gh`: `--repo aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`
130+
Always pass **`--repo aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`** to `gh` (or `export GH_REPO=...`) so you never target the monorepo by mistake.
147131

148-
Always pass **`--repo aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`** (or set `GH_REPO` once) so `gh` never targets your monorepo remote by mistake.
132+
**1. Push sources** (from monorepo root):
149133

150134
```bash
151-
# Optional: default for this shell session
152-
export GH_REPO=aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck
135+
./scripts/push-public-app-subtree.sh arbeitszeitcheck aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck
153136
```
154137

155-
Build the tarball **here** (monorepo `apps/`), then point `gh` at the file with an absolute or correct relative path.
156-
157-
### Create a new GitHub Release (tag + notes + asset)
158-
159-
From `apps/arbeitszeitcheck/release` after building `arbeitszeitcheck-${VERSION}.tar.gz`:
138+
**2. Create the release** from the built tarball (paths relative to `apps/arbeitszeitcheck`):
160139

161140
```bash
162141
VERSION=X.Y.Z
163-
cd /path/to/nextcloud-development/apps/arbeitszeitcheck/release
142+
cd apps/arbeitszeitcheck
164143

165144
gh release create "v${VERSION}" \
166145
--repo aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck \
167146
--title "v${VERSION}" \
168-
--notes-file "GITHUB_RELEASE_NOTES_${VERSION}.md" \
169-
"arbeitszeitcheck-${VERSION}.tar.gz"
147+
--notes-file "release/GITHUB_RELEASE_NOTES_${VERSION}.md" \
148+
"build/release/arbeitszeitcheck-${VERSION}.tar.gz"
170149
```
171150

172-
If the release **already exists** and you only need to **replace the asset** (same version, new tarball):
151+
If the release **already exists** and you only need to **replace the asset**:
173152

174153
```bash
175-
gh release upload "v${VERSION}" "arbeitszeitcheck-${VERSION}.tar.gz" \
154+
gh release upload "v${VERSION}" "build/release/arbeitszeitcheck-${VERSION}.tar.gz" \
176155
--repo aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck \
177156
--clobber
178157
```
179158

180-
### Source code on GitHub
159+
Publishing the **tarball** does not push git history; subtree sync is separate. The release command only attaches the archive to **`nextcloud-arbeitszeitcheck`**.
160+
161+
---
181162

182-
Publishing the **tarball** does not push git history. If you also publish app sources to that repo (e.g. `git subtree split` / manual sync), do that in your usual way **before or after** the release; the commands above only attach the built archive to **`nextcloud-arbeitszeitcheck`**, not to the monorepo.
163+
## 7. Upload at apps.nextcloud.com
164+
165+
Upload the **same** `build/release/arbeitszeitcheck-X.Y.Z.tar.gz` you attached to the GitHub Release.
166+
167+
| Field | Source |
168+
|--------|--------|
169+
| **Archive** | `build/release/arbeitszeitcheck-X.Y.Z.tar.gz` (same bytes as GitHub asset) |
170+
| **SHA-256** | From `sha256sum` / `CHECKSUMS-X.Y.Z.txt` |
171+
| **Signature** | Output of the `openssl dgst … \| openssl base64` command |
172+
| **Changelog** | Paste from `CHANGELOG.md` (or shortened) |
173+
174+
Submit; fix any validation errors (wrong checksum/signature almost always means a wrong file or stale copy).
183175

184176
---
185177

@@ -204,4 +196,5 @@ Publishing the **tarball** does not push git history. If you also publish app so
204196
- [ ] SHA-256 + SHA-512 recorded; store gets **SHA-256**
205197
- [ ] OpenSSL base64 signature **from the same tarball file**
206198
- [ ] Nothing uploaded to git except docs/checksums (no `.tar.gz`, no keys)
207-
- [ ] GitHub Release (if used): **`gh` with `--repo aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`**, not the monorepo
199+
- [ ] **GitHub Release** on **`nextcloud-arbeitszeitcheck`**: tag `vX.Y.Z`, attach **`build/release/arbeitszeitcheck-X.Y.Z.tar.gz`**, `gh --repo aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck` (**required**)
200+
- [ ] App Store upload uses **that same** tarball bytes

release/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This directory holds **release documentation** and optional **checksum list file
44

55
## Full workflow (Nextcloud App Store)
66

7-
See **[APPSTORE-RELEASE.md](./APPSTORE-RELEASE.md)** — build tarball, SHA-256/512, OpenSSL signature, what to paste in the store, **GitHub Release on the public app repo** (`aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`, not the private monorepo — see `ready2publish/REPOSITORY-LAYOUT.md`), and a **gitignore checklist** (what must not be committed).
7+
See **[APPSTORE-RELEASE.md](./APPSTORE-RELEASE.md)** — build tarball, SHA-256/512, OpenSSL signature, **required GitHub Release** on the public app repo (`aSoftwareByDesignRepository/nextcloud-arbeitszeitcheck`, not the private monorepo — see `ready2publish/REPOSITORY-LAYOUT.md`), App Store upload (same `.tar.gz` bytes), and a **gitignore checklist** (what must not be committed).
88

99
## Files in this folder
1010

0 commit comments

Comments
 (0)