Repository navigation
Release from dev: Annotate and Home tabs rebuilt on the hypeR-native client, staging tooling, React app removed #154
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or requestreadyStatus: next step is stated; anyone could pick it up.Status: next step is stated; anyone could pick it up.
Description
Release checklist for the next dev -> master pull request. Paired with montilab/SigRepo release issue montilab/SigRepo#267 (the client one). The two release pull requests merge in the same window, and production rebuilds its image once, after both are in. See the client issue for why the coupling runs both ways; in one line: server dev calls seven client functions that only exist on client dev, and client dev's runHypeR() breaks the run_enrichment MCP tool that server master still ships.
Staging is montilab.bu.edu running montilab/sigrepo:dev; every box below is ticked there unless it says otherwise.
Depends on the client release
- Rebuild the Shiny Annotate tab on SigRepo::runHypeR() and open it #148 Shiny Annotate tab rebuilt on
SigRepo::runHypeR(). On staging, runLLFS_Aging_Gene_2023(uploaded as .rds; it is not a repository signature there) with hypergeometric, kstest and fgsea against MSigDB Hallmarks: results table, dot plot, enrichment plot, Excel export all work; the generated R script shown in the tab reproduces the call. Run a mouse signature with the Organism control set to Mus musculus: it runs; with it left at Homo sapiens, readiness blocks the run naming the mismatch (the behaviour agreed on 2026-09-16; a signature-driven default is a follow-up, not part of this release). The MSigDB cache is read fromdata/msigdb_genesets/in the bind-mounted checkout, and startup does not warn "MSigDB cache file was not found". - Restyle the Shiny Home tab to match the retired React dashboard #153 Shiny Home tab restyled to match the retired React dashboard. Counts on the Home tab equal
SELECT COUNT(*)on the staging database for signatures, collections and organisms; links from the tiles land on the right tabs. - Withdraw the MCP run_enrichment tool until it is rebuilt on the new runHypeR() #139 MCP
run_enrichmentwithdrawn. The MCP tool list has norun_enrichment;rummagene_enrich,search_signatures,compare_signaturesstill answer. This is the change that makes the client release safe for production.
Staging and build tooling (server-only)
- Let a SigRepo client change rebuild the staging image #122 a client change rebuilds the staging image (pairs with client #241, which must be merged for the dispatch to fire). Push a trivial change to client
dev; theSigRepo Docker Buildworkflow runs withcheckout_ref = devand publishes:dev, not:latest.ARG SOURCE_REFRESHmakes the install step a cache miss:packageDescription("OmicSignature")$Versionin the new image is 1.4.1. - Install hypeR before SigRepo and fail the build when an install step leaves no package #145 hypeR installed before SigRepo; build fails if an install leaves no package. The build log shows hypeR installed from GitHub before SigRepo, and
library(SigRepo)loads in the image. - Publish the staging Shiny interface on SHINY_BIND so BU-network users need no tunnel #143 staging Shiny published on
SHINY_BINDfor BU-network users. Reachable at http://montilab.bu.edu:8051 without an SSH tunnel. 8051 is the only SigRepo port off loopback (the API, MCP proxy and database stay on 127.0.0.1); like the other lab apps on that host it is reachable from the public internet, which was accepted on 2026-10-14 with Shiny's own login as the gate. The smoke test's containment check allows it through--public-ports 8051and still catches everything else. - Publish montilab/sigrepo:dev when dependencies change on dev #102, Select the sigrepo image tag from SIGREPO_IMAGE_TAG #104
:devimage published when dependencies change; image tag selected fromSIGREPO_IMAGE_TAG. Staging compose runs:dev, production compose runs:latest. - Add an API smoke test for the staging instance #106, Add a headless Shiny sign-in check for staging #108 API smoke test and headless Shiny sign-in check. Both scripts pass against staging after the rebuild.
- Add a one-command deploy script for the montilab staging instance #110, Add a reseed script for the staging database #112 one-command deploy and reseed scripts for staging. Deploy script brings the stack up from a clean state; reseed restores the replica.
- Run dev's test suite in the dev image #118, Scope the containment check to our own containers #120 dev test suite runs in the dev image; containment check scoped to our containers. CI green on the release PR; the containment check ignores other lab containers with the
sigrepoprefix. -
Apply and record schema migrations with a runner #151 schema migration runnerleft out of this release (decision 2026-10-13); nothing in this release touchesmysql/, so no migration step is needed. Running it twice on the staging database is a no-op the second time and the applied-migrations table records each one.
Removals
- Remove the retired React web app #134 React web app removed. Nothing in compose, nginx or the Dockerfile references
web/; the Shiny app is the only interface and the home page loads. - Keep only code, docs and the testthat suite in the repository #136 scratch files and montilab tooling removed from the repository.
R CMD check-style hygiene: the repo contains code, docs and the testthat suite; the local validation harness still runs fromlocal_validation/where it is gitignored.
Process and CI
- Document the dev branch, the release pull request and the staging tunnel #114, Say when Closes #NNN actually fires under the dev model #117, Close linked issues when a pull request merges into dev #147 CONTRIBUTING documents the dev model and
Closes #NNNtiming; the close-linked-issues workflow fires on merge into dev. Still accurate after the release.
Release steps
- Open the release PR
dev->masterwith this checklist copied into the body. NoCloseslines. - Merge together with the client release PR (Release 1.1.0 from dev: hypeR-native client, searchExternal(), LINCS script writer SigRepo#267); production must not rebuild between the two merges.
- Rebuild (done:
:latestpushed 2026-10-14 16:29 UTC with client master 6c3b7d2 = v1.1.0) and deploymontilab/sigrepo:lateston the DigitalOcean host (pull only; pushes come from the Mac). ConfirmpackageDescription("SigRepo")$Versionis 1.1.0 andpackageDescription("OmicSignature")$Versionis 1.4.1 inside the production API container. - Run the API smoke test and the Shiny sign-in check against sigrepo.org.
- Merge
masterback intodevthe same day. - Close montilab/SigRepo idea Stop leaked DB pools from hanging testServer() output reads #82 by hand if the client release did not.
Out of this release
- Nothing on
devis excluded. A failed box becomes a bug issue linked here; this issue carriesblockeduntil it closes.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestreadyStatus: next step is stated; anyone could pick it up.Status: next step is stated; anyone could pick it up.
Activity
Cvicnaire commentedon Oct 13, 2026
Validation pass, 2026-10-13 against montilab: both checkouts at dev HEAD (server e02aff8, client 76a78c5),
SIGREPO_IMAGE_TAG=dev, today's 12:04 deploy log for the pull and the API smoke test, the Shiny checks through the tunnel with chromote.Ticked
.envhasSIGREPO_IMAGE_TAG=devand today's deploy pulledmontilab/sigrepo:dev;docker-compose-local.ymlreads${SIGREPO_IMAGE_TAG:-latest}; production'sdocker-compose-vm.ymlpins:latestand the droplet runs it (b65374fddca7, built 2026-10-07). The dev build gate works as described: the four dev merges today ran the workflow but pushed nothing, and the tag is still the 2026-10-07 build.Already ticked, re-checked
COUNT(*)on staging is 287.tools/listiscompare_signatures, get_signature_context, list_vocabulary, rummagene_enrich, search_collections, search_features, search_geneset_entries, search_geneset_resources, search_signatures.:devhas OmicSignature 1.4.1 (hypeR 2.11.1, fgsea 1.32.4). The client-triggered path itself has never run: this repo has norepository_dispatchrun, only the 2026-10-07workflow_dispatch, because client #241 is unmerged. The image bakes client d6dd4d88 (the #262 merge), two merges behind client dev.stopifnot(requireNamespace());library(SigRepo)in:devattaches 112 exports including the seven the rebuilt tabs call.web/on dev and nosigrepo-webin any compose file. Staging still has an orphansigrepo-local-webcontainer (today's deploy warned about it) and production still runssigrepo-webon 8050; both aredocker rmchores at deploy time.Not ticked
LLFS_Aging_Gene_2023is not a repository signature on staging, so it went in as an uploaded .rds. Hypergeometric, kstest and fgsea against Hallmarks each produced the results table (100 / 100 / 49 rows), dot plot, enrichment plot, hypeR table and a 200 Excel export, and the R code tab's script reproduces each run exactly (same rows, same 5 / 7 / 4 genesets at FDR ≤ 0.05) when run against staging. The geneset status reads "H: 50 genesets (Homo sapiens, MSigDB cache 2026-09-24)", so no cache warning, but the cache is not in the image: neither:devnor:latesthas/SigRepo_Server/data/msigdb_genesets; staging (and production) read the 28 files/init_db_genesetswrote into the bind-mounted checkout. Mouse: the Organism control is a required select that defaults to Homo sapiens. PickingAging_Ms_male_Liver_SIRT6_KO_vs_WT_Kanfi2012leaves it there and readiness blocks the run with "A run tests one organism: '…' (Mus musculus) is not Homo sapiens. Change the organism in Step 2 or run it separately." That is the behaviour agreed on 2026-09-16, not "species is picked from the signature". With the organism set to Mus musculus,Aging_4mosc1_Old_vs_Young_MontiLab2024ran fgsea (50 rows, 21 at FDR ≤ 0.05) and kstest (100 rows, 31) with every tab, plot and export working, and the SIRT6 signature's hypergeometric run stops cleanly with "No query had genesets left to test" because its two 14-gene groups find no Hallmark genes, which is the intended error path. The box needs rewording to what was built, or a follow-up issue for the auto-pick.smoke_test.shpassed api docs, search (287), gene sets (50 Hallmark, source=cache), enrichment and compare; its one failure iscontainment: published off 127.0.0.1: 0.0.0.0:8051, which is Publish the staging Shiny interface to the BU network so lab members need no SSH tunnel #142's deliberateSHINY_BIND, so the script exits 1 on every montilab deploy until it gets an allowance.smoke_test_ui.Rthrough the tunnel: "PASS signed in as devadmin" with every tab present.--force-recreateversion is on the host now, md5 matches the Mac copy). The onlyapi/change since the last recreate is Move the Shiny sign-in, register, forgot-password and profile flows into an auth module #162'suser.R. Reseed was not run (sudo).testthat-integrationran inmontilab/sigrepo:devwith the client checked out at dev (15:53 today, green); the containment check matches the exactsigrepo-local-*names. "Green on the release PR" waits for the PR.scripts/migrate.shline before the production recreate. Without it no migration is needed: nothing in master..dev touchesmysql/.close-linked-issuesfires on merges into dev only.For the release steps
git merge-tree); the client release PR does not (NEWS.md), see Release 1.1.0 from dev: hypeR-native client, searchExternal(), LINCS script writer SigRepo#267./SigRepo_Serverat c24c6ee (master), image b65374fddca7, and the running API container already carries OmicSignature 1.4.1 with client master 80e36475.docker-compose-vm.ymlchanges in this release (sigrepo-webremoved), so the deploy is a pull plusupwith the new file, andsigrepo-webbecomes an orphan to remove. The droplet had 346 MB available at the time of checking, so recreate the services one at a time.:latestwith whatever client master is at that moment, and a client master merge triggers nothing, so merge the client first, or runworkflow_dispatchon master after both are in.Cvicnaire commentedon Oct 14, 2026
#151 (schema migration runner) is left out of this release by Cameron's decision; it stays an open PR against dev and goes in a later release. Nothing in master..dev touches
mysql/, so this release needs no migration step.Cvicnaire commentedon Oct 14, 2026
Release PR opened: #163 (dev -> master, checklist in the body). Note from montilab/SigRepo#267: the client's
repository_dispatchfrom #241 is dropped by GitHub until this release puts the trigger on master, because dispatches go to the default branch's workflow. A manualworkflow_dispatchon dev is building:devnow.Cvicnaire commentedon Oct 14, 2026
#143 reworded and ticked: 8051 is public on purpose as of 2026-10-14, Shiny's login is the gate, the other SigRepo ports stay on loopback. The containment allowance is #165 (
--public-ports, into dev; it joins the release PR #163 when merged). The montilab deploy script in sigrepo-ops now passes the flag fromSHINY_BINDand has been copied to the host, and~/check_staging.shthere passes it too, so the next staging deploy should end green.Cvicnaire commentedon Oct 14, 2026
Released 2026-10-14. #163 merged into master at 16:07 UTC (merge commit f53606d; the README bot then added a2afda4), one minute after the client's #274, so no rebuild happened between the two merges.
devwas fast-forwarded to master the same day.Image.
montilab/sigrepo:latestwas rebuilt twice by the two master pushes; the later build (run 38595697369) pushed at 16:29 UTC and bakesSIGREPO_BRANCH=master= SigRepo 1.1.0 at 6c3b7d2 (the v1.1.0 tag), OmicSignature 1.4.1 and hypeR 2.11.1, read from the build log.Staging dispatch now works. With the
repository_dispatchtrigger on master, the first client-triggered build ever ran here (run 38596663461, eventrepository_dispatch, fired bygh workflow run notify-staging-image.yml --ref devon the client) and republished:devat 16:36 UTC with the same client. The back-merge push itself did not dispatch because the client's notify workflow has apaths:filter and the merge commit changed no package file.Boxes. #148 reworded to what was built (Organism control with a mismatch guard, cache read from the bind-mounted checkout) and ticked from the 2026-10-13 validation. #151 struck through: out of this release by decision.
Left for the production deploy (needs a shell on the droplet):
One service at a time: the box had 373 MB available before the deploy. Then tick the last two boxes and close this issue.