Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b09f223
Add login.gov auth scaffold and document rollout pause
ChrisChilders-USDA May 27, 2026
5e344f5
Fix guest JBrowse config handling
ChrisChilders-USDA May 27, 2026
a454e10
Fix login provider client ID file handling
ChrisChilders-USDA Jun 2, 2026
7c05c9a
Add assembly ACL management, runtime guards, and CLI test port overrides
ChrisChilders-USDA Jun 4, 2026
3204607
Unblock ESM Jest ACL specs and align jest-util versions
ChrisChilders-USDA Jun 4, 2026
1f87399
Fix ESM ACL changes-service spec fixtures
ChrisChilders-USDA Jun 4, 2026
d4acaaa
Add group-based assembly permission management UI
ChrisChilders-USDA Jun 5, 2026
681778b
Improve Apollo login UX and document local workflow
ChrisChilders-USDA Jun 9, 2026
979c9d7
Improve assembly management and organism metadata UX
ChrisChilders-USDA Jun 9, 2026
400c787
Add manual GHCR registry access smoke workflow
ChrisChilders-USDA Jun 9, 2026
91820fd
Harden Apollo auth and session handling
ChrisChilders-USDA Jun 10, 2026
e55d822
Harden auth/session UX and permission refresh flows
ChrisChilders-USDA Jun 11, 2026
15732f3
Start repo-wide lint remediation wave 1
ChrisChilders-USDA Jun 11, 2026
caf8949
lint(collaboration-server): wave-2 spec and auth strategy cleanup
ChrisChilders-USDA Jun 11, 2026
05538d4
lint(plugin): wave-3 typing cleanup in workspace/session
ChrisChilders-USDA Jun 11, 2026
4289106
lint(plugin): wave-4 reduce unsafe session casts
ChrisChilders-USDA Jun 11, 2026
e45ecbe
lint(plugin): wave-5 session cast cleanup
ChrisChilders-USDA Jun 11, 2026
bb5261e
lint(collaboration-server): wave-6 spec typing cleanup
ChrisChilders-USDA Jun 11, 2026
3105e42
lint(collaboration-server): wave-7 controller and service spec typing
ChrisChilders-USDA Jun 11, 2026
2de2b69
lint(collaboration-server): wave-8 remove last never-cast
ChrisChilders-USDA Jun 11, 2026
cfe9eec
test(collaboration-server): wave-9 explicit jest globals
ChrisChilders-USDA Jun 11, 2026
686669b
chore: complete lint remediation and docs update
ChrisChilders-USDA Jun 11, 2026
0017a2a
fix(ci): resolve collaboration build typing and refine manage-user tabs
ChrisChilders-USDA Jun 11, 2026
5d2985e
fix(lint): remove nested ternary in effective permission source
ChrisChilders-USDA Jun 11, 2026
b496bb6
docs(audit): add branch readiness and delta-baseline plan
ChrisChilders-USDA Jun 11, 2026
2c9454d
docs(audit): add phase-1 findings, evidence matrix, and PR narrative
ChrisChilders-USDA Jun 11, 2026
383917f
docs(lint): add phase-2 plugin TypeScript remediation plan
ChrisChilders-USDA Jun 11, 2026
3f22a63
fix(plugin-ts): clear remaining jbrowse-plugin-apollo type diagnostics
ChrisChilders-USDA Jun 11, 2026
bc0bb0e
fix(lint): resolve CI lint blockers from phase-2 follow-up
ChrisChilders-USDA Jun 11, 2026
ed8e1e5
chore(gmod): clean USDA-specific artifacts for upstream PR
ChrisChilders-USDA Jun 11, 2026
2b32364
chore(gmod): drop unintended cli doc regeneration
ChrisChilders-USDA Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22
21 changes: 21 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,27 @@ git clone https://github.com/GMOD/Apollo3

You'll need `yarn` to be installed.

## Node version compatibility

Apollo3 test tooling currently expects Node 20 or 22.

- Node 26 is known to break Jest 29 in this repository with errors such as
`TypeError: require.resolve.paths is not a function`.
- Run `yarn check:node` before running tests.

If you use `nvm`, you can pin a compatible runtime with:

```sh
nvm use
```

If you do not use a Node version manager, you can still run commands with Node
22 ad hoc:

```sh
npx -y node@22 .yarn/releases/yarn-4.14.1.cjs <yarn command>
```

You then have two options to start Apollo3 for development purposes. In both
cases, the instance is then accessible via

Expand Down
31 changes: 7 additions & 24 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,31 +1,14 @@
# syntax=docker/dockerfile:1

FROM node:24 AS setup
WORKDIR /app
COPY package.json yarn.lock .yarnrc.yml ./
COPY .yarn/ .yarn/
COPY packages/ packages/
RUN find packages/ -type f \! \( -name "package.json" -o -name "yarn.lock" \) -delete && \
find . -type d -empty -delete

FROM node:24 AS build
WORKDIR /app
COPY --from=setup /app .
RUN yarn install --immutable
COPY . .
WORKDIR /app/packages/apollo-collaboration-server
RUN yarn build

FROM node:24
LABEL org.opencontainers.image.source=https://github.com/GMOD/Apollo3
LABEL org.opencontainers.image.description="Apollo collaboration server"
WORKDIR /app
COPY --from=setup /app .
COPY --from=build /app/packages/apollo-collaboration-server/dist /app/packages/apollo-collaboration-server/dist
COPY --from=build /app/packages/apollo-common/dist /app/packages/apollo-common/dist
COPY --from=build /app/packages/apollo-mst/dist /app/packages/apollo-mst/dist
COPY --from=build /app/packages/apollo-schemas/dist /app/packages/apollo-schemas/dist
COPY --from=build /app/packages/apollo-shared/dist /app/packages/apollo-shared/dist
COPY package.json yarn.lock .yarnrc.yml ./
COPY .yarn/ .yarn/
COPY packages/apollo-collaboration-server packages/apollo-collaboration-server
COPY packages/apollo-common packages/apollo-common
COPY packages/apollo-mst packages/apollo-mst
COPY packages/apollo-schemas packages/apollo-schemas
COPY packages/apollo-shared packages/apollo-shared
RUN yarn workspaces focus --production @apollo-annotation/collaboration-server
EXPOSE 3999
CMD ["yarn", "start:prod"]
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,32 @@

Monorepo for Apollo3 development

## Current integration status (2026-06-09)

- Plugin authentication UX now surfaces failed local login attempts clearly
instead of appearing to pass through.
- Apollo plugin menu now includes a visible signed-in indicator
(`Signed in as: <username>` when available).
- Local USDA integration stack currently expects the plugin UMD bundle from
`packages/jbrowse-plugin-apollo/dist/jbrowse-plugin-apollo.umd.development.js`.

## Local integration workflow

For the NAL local stack (served through `jbrowse-apollo-infra`):

1. Build shared package if needed:
- `yarn --cwd packages/apollo-shared build`
2. Build plugin bundle:
- `yarn --cwd packages/jbrowse-plugin-apollo build`
3. Start/restart infra stack from `../jbrowse-apollo-infra`:
- `./scripts/dev/start_local_stack.sh`

## Where to look next

- Infrastructure status and run commands: `../jbrowse-apollo-infra/README.md`
- Active handoff notes and open risks:
`../jbrowse-apollo-infra/HANDOFF_APOLLO3_JBROWSE2.md`

| Package | Description |
| ---------------------------------------------------------------------- | ---------------------------------------------------------- |
| [apollo-collaboration-server](./packages/apollo-collaboration-server/) | Server-side code |
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@
"packages/*"
],
"scripts": {
"check:node": "node -e \"const major=Number(process.versions.node.split('.')[0]); if (major>=26){console.error('Apollo3 test tooling is not compatible with Node '+process.versions.node+'. Use Node 20 or 22.'); process.exit(1)} console.log('Node version OK for Apollo3 test tooling:', process.versions.node)\"",
"lint": "cross-env NODE_OPTIONS='--max-old-space-size=4096' yarn eslint --max-warnings 0",
"build:shared": "yarn workspace @apollo-annotation/shared run build",
"release": "tsx scripts/makeGitTag.ts",
"start:shared": "yarn workspace @apollo-annotation/shared run start",
"start:server": "yarn workspace @apollo-annotation/collaboration-server run start",
"start:plugin": "yarn workspace @apollo-annotation/jbrowse-plugin-apollo run start",
"start": "npm-run-all --print-label --parallel start:shared start:server start:plugin",
"test": "yarn workspaces foreach --all run test:ci",
"test": "yarn check:node && yarn workspaces foreach --all run test:ci",
"postinstall": "husky"
},
"devDependencies": {
Expand Down
109 changes: 105 additions & 4 deletions packages/apollo-cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ $ npm install -g @apollo-annotation/cli
$ apollo COMMAND
running command...
$ apollo (--version)
@apollo-annotation/cli/1.0.0 linux-x64 node-v24.15.0
@apollo-annotation/cli/1.0.0 darwin-arm64 node-v26.0.0
$ apollo --help [COMMAND]
USAGE
$ apollo COMMAND
Expand Down Expand Up @@ -62,6 +62,9 @@ USAGE
- [`apollo jbrowse set-config INPUTFILE`](#apollo-jbrowse-set-config-inputfile)
- [`apollo login`](#apollo-login)
- [`apollo logout`](#apollo-logout)
- [`apollo permissions grant`](#apollo-permissions-grant)
- [`apollo permissions list`](#apollo-permissions-list)
- [`apollo permissions revoke`](#apollo-permissions-revoke)
- [`apollo refseq add-alias INPUT-FILE`](#apollo-refseq-add-alias-input-file)
- [`apollo refseq get`](#apollo-refseq-get)
- [`apollo status`](#apollo-status)
Expand Down Expand Up @@ -335,8 +338,8 @@ DESCRIPTION
Address and port e.g http://localhost:3999

- accessType:
How to access Apollo. accessType is typically one of: google, microsoft, guest, root. Allowed types depend on your
Apollo setup
How to access Apollo. accessType is typically one of: google, microsoft, logingov, guest, root. Allowed types depend
on your Apollo setup

- accessToken:
Access token. Usually inserted by `apollo login`
Expand Down Expand Up @@ -1019,7 +1022,7 @@ DESCRIPTION
```

_See code:
[@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.0.8//workspaces/Apollo3/.yarn/cache/@oclif-plugin-help-npm-6.0.8-336726b8e7-4b3be03d8a.zip/node_modules/@oclif/plugin-help/lib/commands/help.ts)_
[@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.0.8/src/commands/help.ts)_

## `apollo jbrowse desktop JBROWSEFILE`

Expand Down Expand Up @@ -1190,6 +1193,104 @@ EXAMPLES
_See code:
[src/commands/logout.ts](https://github.com/GMOD/Apollo3/blob/v1.0.0/packages/apollo-cli/src/commands/logout.ts)_

## `apollo permissions grant`

Grant assembly permissions to a user

```
USAGE
$ apollo permissions grant -u <value> -a <value> [--profile <value>] [--config-file <value>] [--view] [--edit]

FLAGS
-a, --assembly=<value>... (required) Assembly name or id
-u, --user=<value> (required) User id, username, or email
--config-file=<value> Use this config file (mostly for testing)
--edit Grant edit permission (implies view)
--profile=<value> Use credentials from this profile
--view Grant view permission

DESCRIPTION
Grant assembly permissions to a user

Grants annotation permissions for one user across one or more assemblies.

EXAMPLES
Grant view access to one assembly:

$ apollo permissions grant -u user@example.org -a myAssembly --view

Grant edit access to multiple assemblies (implies view):

$ apollo permissions grant -u user@example.org -a asm1 asm2 --edit
```

_See code:
[src/commands/permissions/grant.ts](https://github.com/GMOD/Apollo3/blob/v1.0.0/packages/apollo-cli/src/commands/permissions/grant.ts)_

## `apollo permissions list`

List assembly permissions

```
USAGE
$ apollo permissions list [--profile <value>] [--config-file <value>] [-u <value>] [-a <value>]

FLAGS
-a, --assembly=<value> Filter by one assembly name or id
-u, --user=<value> Filter by user id, username, or email
--config-file=<value> Use this config file (mostly for testing)
--profile=<value> Use credentials from this profile

DESCRIPTION
List assembly permissions

Lists assembly permission documents, optionally filtered by user and/or assembly.

EXAMPLES
List all permissions:

$ apollo permissions list

List permissions for one user:

$ apollo permissions list -u user@example.org

List permissions for one assembly:

$ apollo permissions list -a myAssembly
```

_See code:
[src/commands/permissions/list.ts](https://github.com/GMOD/Apollo3/blob/v1.0.0/packages/apollo-cli/src/commands/permissions/list.ts)_

## `apollo permissions revoke`

Revoke assembly permissions from a user

```
USAGE
$ apollo permissions revoke -u <value> -a <value> [--profile <value>] [--config-file <value>]

FLAGS
-a, --assembly=<value>... (required) Assembly name or id
-u, --user=<value> (required) User id, username, or email
--config-file=<value> Use this config file (mostly for testing)
--profile=<value> Use credentials from this profile

DESCRIPTION
Revoke assembly permissions from a user

Revokes annotation permissions for one user across one or more assemblies.

EXAMPLES
Revoke access from one assembly:

$ apollo permissions revoke -u user@example.org -a myAssembly
```

_See code:
[src/commands/permissions/revoke.ts](https://github.com/GMOD/Apollo3/blob/v1.0.0/packages/apollo-cli/src/commands/permissions/revoke.ts)_

## `apollo refseq add-alias INPUT-FILE`

Add reference name aliases from a file
Expand Down
4 changes: 4 additions & 0 deletions packages/apollo-cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"prepare": "yarn build",
"test": "yarn tsx src/test/test.ts",
"test:ci": "yarn tsx src/test/test.ts",
"test:permissions": "yarn tsx --test-name-pattern='Permissions grant/list/revoke' src/test/test.ts",
"version": "oclif readme --multi --dir ../website/docs/03-guides/04-cli/ && oclif readme && git add README.md"
},
"oclif": {
Expand Down Expand Up @@ -61,6 +62,9 @@
"jbrowse": {
"description": "Commands to manage the JBrowse configuration"
},
"permissions": {
"description": "Commands to manage assembly permissions"
},
"refseq": {
"description": "Commands to manage reference sequences"
},
Expand Down
10 changes: 8 additions & 2 deletions packages/apollo-cli/src/ApolloConf.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ function optionDocs(): { key: string; description: string }[] {
docs.push({
key: v,
description:
'How to access Apollo. accessType is typically one of: google, microsoft, guest, root. Allowed types depend on your Apollo setup',
'How to access Apollo. accessType is typically one of: google, microsoft, logingov, guest, root. Allowed types depend on your Apollo setup',
})
break
}
Expand Down Expand Up @@ -147,7 +147,13 @@ export class ApolloConf extends Conf {

const profileSchema = Joi.object({
address: Joi.string().uri({ scheme: /https?/ }),
accessType: Joi.string().valid('google', 'microsoft', 'root', 'guest'),
accessType: Joi.string().valid(
'google',
'microsoft',
'logingov',
'root',
'guest',
),
accessToken: Joi.string(),
rootPassword: Joi.string().when('accessType', {
is: Joi.string().valid('root'),
Expand Down
25 changes: 25 additions & 0 deletions packages/apollo-cli/src/commands/permissions/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# CLI Permissions Commands

This folder defines assembly ACL management commands for the Apollo CLI.

Commands:

- `apollo permissions list`
- `apollo permissions grant`
- `apollo permissions revoke`

Resolution behavior:

- User input supports user id, username, or email.
- Assembly input supports assembly id or common assembly name.

Grant semantics:

- `--edit` implies `canViewAnnotations=true`.
- If no explicit permission flags are provided to `grant`, it defaults to
view-only.

Implementation notes:

- Commands call collaboration-server endpoint `assemblyPermissions`.
- `grant` and `revoke` perform `PUT` upserts per assembly.
Loading