Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
6ad2153
initial commit
marjo-luc Jul 2, 2025
39b51c1
wip
marjo-luc Jul 13, 2025
e9113d1
style updates
marjo-luc Jul 13, 2025
c581ffb
reg form updates
marjo-luc Jul 14, 2025
3f2549c
style changes
marjo-luc Jul 14, 2025
82ef735
wip
marjo-luc Jul 29, 2025
83d03d4
wip
marjo-luc Jul 29, 2025
7e1f36c
wip
marjo-luc Jul 30, 2025
e61587f
wip
marjo-luc Aug 4, 2025
b47002b
wip
marjo-luc Aug 5, 2025
03c1679
added option to provide prebuilt image
marjo-luc Aug 11, 2025
8ca189e
feedback updates
marjo-luc Aug 13, 2025
626bf94
cleanup
marjo-luc Aug 13, 2025
ea98f35
Add type definitions and authentication utilities for builds/deployments
sujen1412 Aug 14, 2025
0444fe8
Fix MAAP API authentication using cpticket header
sujen1412 Aug 14, 2025
32c1266
Add BuildsDeploymentsGrid component for user builds and deployments
sujen1412 Aug 14, 2025
3fcb7d1
Integrate BuildsDeploymentsWidget with JupyterLab extension
sujen1412 Aug 14, 2025
d318ea5
Add project documentation and update gitignore
sujen1412 Aug 14, 2025
be83e3b
Update dependencies and build artifacts
sujen1412 Aug 14, 2025
5700142
Add refresh functionality to builds and deployments grid
sujen1412 Aug 14, 2025
4302a34
Add deployment status and pipeline link types
sujen1412 Aug 14, 2025
108f030
Fix code formatting and style issues
sujen1412 Aug 14, 2025
04ed94b
Implement proper deployment status and pipeline link handling
sujen1412 Aug 14, 2025
4b780a2
Add comments
sujen1412 Aug 20, 2025
4f73242
added validation against ogc best practices
marjo-luc Aug 25, 2025
0d32e88
integrated MAAP API build endpoint
marjo-luc Aug 25, 2025
ab41606
updates to include doc for inputs
marjo-luc Aug 25, 2025
95ca980
resolved merge conflicts
marjo-luc Aug 25, 2025
0e594e5
Merge pull request #25 from MAAP-Project/feature/builds-deployments-w…
marjo-luc Aug 25, 2025
6c699a3
updated submission toast to point to builds/deployments dashboard
marjo-luc Aug 25, 2025
5d38270
added algorithm id to details table
marjo-luc Aug 25, 2025
d2a0b4a
added clear form option | updated input type names
marjo-luc Aug 26, 2025
8826786
clear form on algo config load
marjo-luc Aug 26, 2025
92d9d67
added refresh button to process list
marjo-luc Aug 26, 2025
235f019
handle default value if object | added deafult to base container | cl…
marjo-luc Sep 12, 2025
c1c03c5
update constants
marjo-luc Sep 23, 2025
e0276c3
added server token retrieval | updated constants
marjo-luc Oct 15, 2025
b065bef
hard code url
marjo-luc Oct 15, 2025
7826fb3
update const
marjo-luc Oct 15, 2025
5e6534c
update env
marjo-luc Oct 15, 2025
013de0d
update const
marjo-luc Oct 15, 2025
c233f65
updated api endpoints
marjo-luc Oct 16, 2025
31e9b10
refactored api | created algo ext settings | misc. changes
marjo-luc Feb 3, 2026
12fb54c
pkg updates | minor 401 handling updates
marjo-luc Feb 3, 2026
e8d701f
remove dead code
marjo-luc Feb 3, 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
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
maap_algorithms_jupyter_extension/labextension
maap_algorithms_jupyter_extension/_version.py

algorithm_configs/


### Python ###
# Byte-compiled / optimized / DLL files
Expand Down Expand Up @@ -53,4 +55,6 @@ ui-tests/test-results
ui-tests/playwright-report
ui-tests/yarn.lock
coverage/
.DS_Store
.DS_Store
venv/*
.claude/*
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
v20.19.2
28 changes: 0 additions & 28 deletions CHANGELOG.md

This file was deleted.

112 changes: 112 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

This is a JupyterLab extension for MAAP (Multi-Mission Algorithm and Analysis Platform) that provides algorithm management capabilities. The extension consists of two main plugins:

- **List Algorithms**: View and browse OGC-compliant algorithms in a data grid
- **Register Algorithms**: Form-based interface for registering new algorithms with the MAAP platform

## Architecture

### Core Structure

- **Frontend**: TypeScript/React JupyterLab extension using Material-UI components
- **Backend Integration**: Python package that integrates with JupyterLab 4.0+
- **Build System**: Uses `jlpm` (JupyterLab's yarn), TypeScript compilation, and hatch for Python packaging

### Key Directories

- `src/` - TypeScript/React source code
- `components/` - React components (DataGrid, RegistrationForm, CustomFileDialog)
- `types/` - TypeScript type definitions for algorithm configs and processes
- `utils/` - API utilities and helper functions
- `maap_algorithms_jupyter_extension/` - Python package directory
- `style/` - CSS stylesheets including custom Stellar design system styles
- `ui-tests/` - Playwright integration tests

### Main Components

- `AlgorithmsWidget`: Displays algorithm list using Material React Table
- `RegisterAlgorithmsWidget`: Form interface for algorithm registration
- Algorithm configuration follows OGC standards with inputs/outputs defined in YAML

## Development Commands

### Setup

```bash
# Install dependencies
jlpm

# Development install (links extension to JupyterLab)
pip install -e "."
jupyter labextension develop . --overwrite
```

### Building

```bash
# Development build
jlpm build

# Production build
jlpm build:prod

# Watch mode (rebuilds on changes)
jlpm watch
```

### Testing

```bash
# Run Jest unit tests
jlpm test

# Run integration tests (Playwright)
cd ui-tests && jlpm test
```

### Code Quality

```bash
# Run all linting and formatting
jlpm lint

# Individual tools
jlpm eslint # TypeScript/JavaScript linting
jlpm prettier # Code formatting
jlpm stylelint # CSS linting
```

### Running JupyterLab

```bash
# Start JupyterLab with extension
jupyter lab
```

## Algorithm Configuration

The extension uses `algorithm_config.yml` files that define:

- Algorithm metadata (name, version, description)
- Runtime requirements (RAM, cores, container URLs)
- Input/output specifications following OGC standards
- Build and run commands for containerized execution

## Key Technologies

- **UI Framework**: React 18 + Material-UI 6 + NASA JPL Stellar design system
- **Data Display**: Material React Table for algorithm listings
- **JupyterLab APIs**: File browser, document manager, launcher integration
- **Testing**: Jest for unit tests, Playwright for E2E tests
- **Build Tools**: TypeScript, ESLint, Prettier, Stylelint

## TypeScript Configuration

- Interface naming convention: Must start with 'I' followed by PascalCase
- Single quotes enforced, no trailing commas
- Source maps enabled for debugging
Empty file removed CONTRIBUTING.md
Empty file.
6 changes: 3 additions & 3 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Apache License
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

Expand Down Expand Up @@ -175,7 +175,7 @@

END OF TERMS AND CONDITIONS

Copyright (c) 2024 California Institute of Technology (“Caltech”) U.S. Government sponsorship acknowledged,
Copyright (c) 2026 California Institute of Technology (“Caltech”) U.S. Government sponsorship acknowledged,
and United States Government as represented by the Administrator of the National Aeronautics and Space Administration.
All rights reserved.

Expand All @@ -189,4 +189,4 @@
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.
49 changes: 24 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
# MAAP Algorithms Jupyter Extension
# maap_algorithms_jupyter_extension

## Requirements
[![Github Actions Status](/workflows/Build/badge.svg)](/actions/workflows/build.yml)

A JupyterLab extension.

| Package | Version |
|---------|---------|
| JupyterLab | v4.1.6 |
| NodeJS | v18.20.0 |
| Python | >= v3.8 |
## Requirements

These are the recommended versions. Others may be suitable, but are not actively supported.
- JupyterLab >= 4.0.0

## Install

Expand Down Expand Up @@ -38,9 +36,7 @@ The `jlpm` command is JupyterLab's pinned version of

```bash
# Clone the repo to your local environment
# Change directory to the algorithms_jupyter_extension directory
# Install dependencies
jlpm install
# Change directory to the maap_algorithms_jupyter_extension directory
# Install package in development mode
pip install -e "."
# Link your development version of the extension with JupyterLab
Expand All @@ -66,33 +62,36 @@ By default, the `jlpm build` command generates the source maps for this extensio
jupyter lab build --minimize=False
```

## Development uninstall
### Development uninstall

```bash
pip uninstall maap_algorithms_jupyter_extension
```

In development mode, you will also need to remove the symlink created by `jupyter labextension develop`
command. To find its location, you can run `jupyter labextension list` to figure out where the `labextensions`
folder is located. Then you can remove the symlink named `algorithms_jupyter_extension` within that folder.
folder is located. Then you can remove the symlink named `maap_algorithms_jupyter_extension` within that folder.

## Testing
### Testing the extension

Playwright is the testing framework used. When testing locally, use the following command to start the jupyter server and run the tests:
```
jlpm run start & jlpm run test
```
#### Frontend tests

To test using the interactive UI, run the following instead:
This extension is using [Jest](https://jestjs.io/) for JavaScript code testing.

```
jlpm run start & jlpm run test --ui
To execute them, execute:

```sh
jlpm
jlpm test
```

## Release
#### Integration tests

See [RELEASE](RELEASE.md)
This extension uses [Playwright](https://playwright.dev/docs/intro) for the integration tests (aka user level tests).
More precisely, the JupyterLab helper [Galata](https://github.com/jupyterlab/jupyterlab/tree/master/galata) is used to handle testing the extension in JupyterLab.

## Contribute
More information are provided within the [ui-tests](./ui-tests/README.md) README.

See [CONTRIBUTING](CONTRIBUTING.md)
### Packaging the extension

See [RELEASE](RELEASE.md)
40 changes: 26 additions & 14 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
# Making a new release of algorithms_jupyter_extension
# Making a new release of maap_algorithms_jupyter_extension

The extension can be published to `PyPI` and `npm` manually or using the [Jupyter Releaser](https://github.com/jupyter-server/jupyter_releaser).

## Manual release

### Python package

This extension can be distributed as Python
packages. All of the Python
packaging instructions in the `pyproject.toml` file to wrap your extension in a
Python package. Before generating a package, we first need to install `build`.
This extension can be distributed as Python packages. All of the Python
packaging instructions are in the `pyproject.toml` file to wrap your extension in a
Python package. Before generating a package, you first need to install some tools:

```bash
pip install build twine hatch
Expand All @@ -22,6 +21,18 @@ See the docs on [hatch-nodejs-version](https://github.com/agoose77/hatch-nodejs-
hatch version <new-version>
```

Make sure to clean up all the development files before building the package:

```bash
jlpm clean:all
```

You could also clean up the local git repository:

```bash
git clean -dfX
```

To create a Python source package (`.tar.gz`) and the binary package (`.whl`) in the `dist/` directory, do:

```bash
Expand All @@ -47,19 +58,20 @@ npm publish --access public

## Automated releases with the Jupyter Releaser

The extension repository should already be compatible with the Jupyter Releaser.

Check out the [workflow documentation](https://github.com/jupyter-server/jupyter_releaser#typical-workflow) for more information.
The extension repository should already be compatible with the Jupyter Releaser. But
the GitHub repository and the package managers need to be properly set up. Please
follow the instructions of the Jupyter Releaser [checklist](https://jupyter-releaser.readthedocs.io/en/latest/how_to_guides/convert_repo_from_repo.html).

Here is a summary of the steps to cut a new release:

- Fork the [`jupyter-releaser` repo](https://github.com/jupyter-server/jupyter_releaser)
- Add `ADMIN_GITHUB_TOKEN`, `PYPI_TOKEN` and `NPM_TOKEN` to the Github Secrets in the fork
- Go to the Actions panel
- Run the "Draft Changelog" workflow
- Merge the Changelog PR
- Run the "Draft Release" workflow
- Run the "Publish Release" workflow
- Run the "Step 1: Prep Release" workflow
- Check the draft changelog
- Run the "Step 2: Publish Release" workflow

> [!NOTE]
> Check out the [workflow documentation](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html)
> for more information.

## Publishing to `conda-forge`

Expand Down
1 change: 1 addition & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = require('@jupyterlab/testutils/lib/babel.config');
7 changes: 7 additions & 0 deletions environment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
name: algorithms-jlab-ext
channels:
- conda-forge
dependencies:
- python=3.11
- jupyterlab=4.4.3
- ipython
3 changes: 0 additions & 3 deletions junit.xml

This file was deleted.

11 changes: 9 additions & 2 deletions maap_algorithms_jupyter_extension/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
from ._version import __version__
try:
from ._version import __version__
except ImportError:
# Fallback when using the package in dev mode without installing
# in editable mode with pip. It is highly recommended to install
# the package from a stable release or in editable mode: https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs
import warnings
warnings.warn("Importing 'maap_algorithms_jupyter_extension' outside a proper installation.")
__version__ = "dev"


def _jupyter_labextension_paths():
return [{
"src": "labextension",
"dest": "maap_algorithms_jupyter_extension"
}]

Loading
Loading