This document explains how LaWallet NWC releases update the Umbrel community app package automatically across two repositories:
lawalletio/lawallet-nwc: builds and publishes the Docker image.lawalletio/umbrel-app-store: updates the Umbrel package files and merges the package bump.
-
A new GitHub Release is published in
lawalletio/lawallet-nwc. -
lawalletio/lawallet-nwc/.github/workflows/docker-publish.ymlbuilds and pushes the Docker image:masize/lawallet-nwc:<version> masize/lawallet-nwc:latest -
After Docker Hub publish succeeds, the same workflow sends a
repository_dispatchevent tolawalletio/umbrel-app-store. -
lawalletio/umbrel-app-store/.github/workflows/update-lawallet-nwc.ymlreceives the dispatch and updates:README.md lawallet-nwc/umbrel-app.yml lawallet-nwc/docker-compose.yml test/docker-compose.regtest.yml -
The app-store workflow opens or updates a package bump PR.
-
The app-store workflow squash-merges that PR into
master. -
The app-store workflow deletes the automation branch.
The app-store workflow also supports manual runs with workflow_dispatch.
Configure these under:
lawalletio/lawallet-nwc
Settings
Secrets and variables
Actions
Repository secrets
Required secrets:
UMBREL_APP_STORE_DISPATCH_TOKEN=<GitHub fine-grained PAT>
DOCKERHUB_USERNAME=masize
DOCKERHUB_TOKEN=<Docker Hub access token with push access to masize/lawallet-nwc>
UMBREL_APP_STORE_DISPATCH_TOKEN lets the release repository notify
lawalletio/umbrel-app-store after the Docker image is available.
DOCKERHUB_USERNAME and DOCKERHUB_TOKEN are used by Docker Hub login before
building and pushing the multi-architecture image.
Configure this under:
lawalletio/umbrel-app-store
Settings
Secrets and variables
Actions
Repository secrets
Required secret:
UMBREL_APP_STORE_UPDATE_TOKEN=<same GitHub fine-grained PAT>
UMBREL_APP_STORE_UPDATE_TOKEN lets the app-store workflow push the automation
branch, open or update the package bump PR, squash-merge it, and delete the
automation branch.
Use the same GitHub token value for both:
lawalletio/lawallet-nwc:
UMBREL_APP_STORE_DISPATCH_TOKEN
lawalletio/umbrel-app-store:
UMBREL_APP_STORE_UPDATE_TOKEN
Create one fine-grained personal access token:
GitHub
Your avatar
Settings
Developer settings
Personal access tokens
Fine-grained tokens
Generate new token
Use these settings:
Token name: LaWallet Umbrel automation
Resource owner: lawalletio
Repository access: Only select repositories
Selected repository: lawalletio/umbrel-app-store
Repository permissions:
Contents: Read and write
Pull requests: Read and write
Metadata: Read-only
Metadata: Read-only is added automatically by GitHub.
Do not choose Public repositories when creating the token. That option is
read-only and hides repository write permissions such as Contents and
Pull requests.
The Pull requests permission is under repository permissions, not
organization permissions. If only the Organizations permission box is visible,
switch Repository access to Only select repositories and select
lawalletio/umbrel-app-store.
After generating the token, copy the full value:
github_pat_...
Use that full value as the value for both GitHub secrets listed above.
Set the dispatch secret in lawalletio/lawallet-nwc:
gh secret set UMBREL_APP_STORE_DISPATCH_TOKEN \
--repo lawalletio/lawallet-nwc \
--body 'github_pat_...'Set the update secret in lawalletio/umbrel-app-store:
gh secret set UMBREL_APP_STORE_UPDATE_TOKEN \
--repo lawalletio/umbrel-app-store \
--body 'github_pat_...'Set or rotate Docker Hub secrets in lawalletio/lawallet-nwc:
gh secret set DOCKERHUB_USERNAME \
--repo lawalletio/lawallet-nwc \
--body 'masize'
gh secret set DOCKERHUB_TOKEN \
--repo lawalletio/lawallet-nwc \
--body '<docker-hub-access-token>'The app-store repository may have repository-level GitHub Actions
Read and write permissions disabled by organization policy.
The app-store workflow therefore does not depend on the built-in
GITHUB_TOKEN for write access. It checks out the repository with persisted
credentials disabled and uses UMBREL_APP_STORE_UPDATE_TOKEN when it needs to
push and merge.
In lawalletio/umbrel-app-store, open:
Actions
Update LaWallet NWC
Run workflow
Use:
version: 1.2.3
image: masize/lawallet-nwc:1.2.3
Expected result:
- Workflow updates the package files.
- Workflow opens a PR named
Update LaWallet NWC to 1.2.3. - Workflow squash-merges the PR into
master. - Workflow deletes the automation branch.
Use a real published Docker tag for a meaningful end-to-end test.
In lawalletio/lawallet-nwc, open:
Actions
Docker Publish
Run workflow
Provide a tag that exists or that you intentionally want to publish:
tag: 1.2.3
Expected result:
- Docker image is built and pushed to Docker Hub.
- Workflow dispatches
lawallet-nwc-releasetolawalletio/umbrel-app-store. - The app-store updater runs.
- The app-store package update is merged into
master.
The normal release path is:
-
Publish a GitHub Release in
lawalletio/lawallet-nwc, usually with a tag such asv1.2.3. -
The Docker workflow normalizes the version by removing the leading
v. -
Docker Hub receives:
masize/lawallet-nwc:1.2.3 masize/lawallet-nwc:latest -
The app-store package is updated to:
version: "1.2.3" image: masize/lawallet-nwc:1.2.3
The app-store updater creates branches named:
automation/lawallet-nwc-<version>
For example:
automation/lawallet-nwc-1.2.3
The PR title is:
Update LaWallet NWC to <version>
The workflow uses a squash merge into master and deletes the automation
branch afterward.
Add the secret to lawalletio/lawallet-nwc.
The value should be the fine-grained GitHub PAT with access to
lawalletio/umbrel-app-store.
Add the secret to lawalletio/umbrel-app-store.
Use the same PAT value as UMBREL_APP_STORE_DISPATCH_TOKEN.
This usually means the workflow is using the built-in GITHUB_TOKEN without
write permissions, or the PAT does not have enough repository permissions.
Confirm the PAT has:
Contents: Read and write
Pull requests: Read and write
Confirm the token is scoped to:
lawalletio/umbrel-app-store
The token can open the PR but cannot merge it, or branch protection blocks the merge.
Check:
- The PAT has
Pull requests: Read and write. - The app-store branch protection allows this automation to merge.
- Required checks, if any, pass before the workflow tries to merge.
The workflow uses direct gh pr merge --squash, not GitHub's separate
auto-merge queue.
Check the Request Umbrel app package update job in
lawalletio/lawallet-nwc.
Common causes:
UMBREL_APP_STORE_DISPATCH_TOKENis missing.- The PAT is expired.
- The PAT is not authorized for the
lawalletioorganization. - The PAT does not have access to
lawalletio/umbrel-app-store.
The dispatch only happens after Docker Hub publish succeeds.
Check:
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN- Docker Hub repository access for
masize/lawallet-nwc - Build errors in
apps/web/Dockerfile
In lawalletio/lawallet-nwc:
.github/workflows/docker-publish.yml
In lawalletio/umbrel-app-store:
.github/workflows/update-lawallet-nwc.yml
README.md
lawallet-nwc/umbrel-app.yml
lawallet-nwc/docker-compose.yml
test/docker-compose.regtest.yml