A Go implementation of the GA4GH Data Repository Service (DRS) for iRODS.
This project provides a DRS-oriented service layer for exposing iRODS-backed content through the GA4GH DRS model, along with command-line and Go package tooling for administering DRS metadata and validating DRS behavior in development and test environments.
It includes:
- a REST service for serving DRS API endpoints
- Go packages for mapping DRS concepts onto iRODS data objects
- a
drscmdcommand-line tool for DRS administration workflows - unit, integration, and live functional test support
| Field | Value |
|---|---|
| Project Name | iRODS DRS Client - GoLang |
| Current Version | TBD |
| Status | Active Development |
| Primary Developer | Mike Conway |
| Co-Developer | Deep Patel |
| Organization | NIEHS |
| Repository | https://github.com/michael-conway/irods-go-drs |
| Contact | mike.conway@nih.gov |
| Issue Tracker | https://github.com/michael-conway/irods-go-drs/issues |
| License | TBD |
The repository follows a conventional Go layout centered around a generated-and-customized REST service, iRODS/DRS support packages, and developer tooling.
| Path | Purpose |
|---|---|
main.go |
Service entrypoint for the DRS REST API |
internal/ |
HTTP handlers, routing, generated models, OpenAPI-serving endpoints, and service implementation details |
drs-support/ |
DRS-to-iRODS mapping logic, manifest support, validation helpers, and configuration support |
tools/drs-console/ |
drscmd command-line tool for DRS administration |
api/ |
OpenAPI source documents embedded and served by the service |
config/ |
Sample runtime configuration including drs-config.yaml and service-info.json |
test/ |
Broader integration tests that span packages without requiring the full docker-compose stack |
e2e/ |
Docker-compose-backed end-to-end HTTP and workflow tests |
deployments/ |
Development and integration test deployment assets, including docker-based test environments |
The implementation is written in Go and uses a generated Swagger/OpenAPI server foundation with project-specific routing, handlers, and iRODS integration layered on top. The CLI is built in Go as well and is designed to work alongside gocmd for iRODS environment and session management.
Testing is organized in layers:
- unit tests live next to the code they validate and run by default with
go test ./... - integration tests live under
test/and are opt-in with theintegrationbuild tag - end-to-end tests live under
e2e/and are opt-in with thee2ebuild tag - live CLI functional tests use the built
drscmdbinary and a reachable iRODS test environment
For CLI-centered development, gocmd should be installed and on PATH so that drscmd can consume the saved iCommands-compatible environment and session state.
This repository includes a DRS administration command line tool at tools/drs-console.
drscmd is intended to work alongside CyVerse gocmd:
- use
gocmdfor general iRODS operations and environment/session management - use
drscmdfor DRS-specific administration such asdrsinfo,drsls,drsmake,drsupdate, anddrsrm
GoCommands resources:
- CyVerse GoCommands repository: https://github.com/cyverse/gocommands
- CyVerse GoCommands user guide: https://learning.cyverse.org/ds/gocommands/
See the DRS Console User Guide for usage and workflow details.
When the REST service is running locally on the default port, the API documentation is available at:
- Swagger UI:
http://localhost:8080/swagger - OpenAPI spec:
http://localhost:8080/openapi.yaml
- GA4GH Data Repository Service (DRS): https://ga4gh.github.io/data-repository-service-schemas/
- go-irodsclient: https://github.com/cyverse/go-irodsclient
- Viper: https://github.com/spf13/viper
- Zerolog: https://github.com/rs/zerolog
- slog logging guide: https://betterstack.com/community/guides/logging/logging-in-go/
- Go OIDC library: https://github.com/coreos/go-oidc
- Keycloak: https://www.keycloak.org/documentation
- GoCloak - https://github.com/Nerzal/gocloak
- Gorilla Mux: https://github.com/gorilla/mux