Latest commit

History

984 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🔥 FHIRsmith - FHIR Server toolkit

This server provides a set of server-side services that are useful for the FHIR Community. The set of are two kinds of services:

Modules useful to anyone in the community

Services useful the community as a whole

Summary Statement

  • Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
  • Issues / Discussion: Use github issues
  • License: BSD-3
  • Contribution Policy: Make PRs. PRs have to pass all the tests
  • Security Information: See security.md

Build Status

CI BuildReleaseDocker

Note: In production, this server always runs behind an nginx reverse proxy, so there's no in-build support for SSL, rate limiting etc.

Quick Start

There are 4 executable programs:

  • the server (node server)
  • the terminology importer (node --max-old-space-size=8192 tx/importers/tx-import XXX) - see Doco
  • the test cases (npm test)
  • the test cases generater (node tx/tests/testcases-generator.js)

Unless you're developing, you only need the first two

FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note, though, that if you support FHIRsmith commercially as part of a managed service or product, you are required to be a Commercial Partner of HL7 - see (link to be provided).

Quick Start

  • Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
  • Figure out the data directory
  • Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
  • Run the server

For further details of these steps, read on

Data Directory

The server separates code from runtime data. All databases, caches, logs, and downloaded files are stored in a single data directory. The location is determined by:

  1. The FHIRSMITH_DATA_DIR environment variable (if set)
  2. Otherwise, defaults to ./data relative to the working directory (development set up)

The data directory contains (depending on which modules are in use):

  • config.json — server and module configuration
  • logs/ — server and nginx log files
  • terminology-cache/ — downloaded terminology packages and FHIR packages
  • packages/ — package server database
  • xig/ — XIG database
  • shl/ — SHL databases and certificates
  • registry/ — registry crawler data
  • publisher/ — publisher database and build workspace
  • token/ — token database

During development with a cloned repository, the data directory defaults to [root]/data (the test cases require this setup). When deployed via Docker or npm, the data directory is provided by the host — see Deployment below.

Prerequisites

  • Node.js 16+
  • NPM or Yarn
  • Java 17+ (for FHIR validator, also for the test cases)

Installation

These instructions are for Development. For deployment, see below.

# Clone the repository
git clone https://github.com/HealthIntersections/FHIRsmith
cd FHIRsmith
# Install dependencies
npm install
# Create required directories
mkdir -p data data/logs
# Copy example configuration
cp config.example.json data/config.json
# Edit configuration as needed
nano data/config.json

Each Module has it's own entry in the config, as described by the module

Basic Configuration

Create a config.json file in your data directory (use config-template.json as a starting point):

{
"hostName" : "[descriptive name for the server]",
"server": {
"port": 3000,
"cors": {
"origin": "*",
"credentials": true
}
},
"modules": {
// per modules...
}
}

Logging Configuration

Add a logging section to config.json to control log behaviour. All fields are optional and have sensible defaults:

{
"logging": {
"level": "info",
"console": true,
"consoleErrors": false,
"maxFiles": 14,
"maxSize": "50m",
"flushInterval": 2000,
"flushSize": 200
}
}
OptionDefaultDescription
level"info"Minimum level to log: error, warn, info, debug, or verbose
consoletrueWrite log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant
consoleErrorsfalseWhether error and warn levels appear on the console. When false, errors and warnings are written to the log file only
maxFiles14Number of daily log files to retain before old ones are deleted
maxSize0 (unlimited)Maximum size per log file before rotation. Accepts human-readable strings: "20m", "1g", or a raw byte count
flushInterval2000Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load
flushSize200Number of buffered log lines that trigger an immediate flush regardless of the timer

Log files are written to the logs/ subdirectory of the data directory as server-YYYY-MM-DD.log. A server.log symlink always points to the current day's file, so tail -f data/logs/server.log tracks the active log without needing to know the date.

Start the Server

# Development mode
npm run dev
# Production mode
npm start

The server will be available at http://localhost:{port} using the port specified in the config. In the production servers listed above, the server always sits behind an NGINX server which manages SSL, security, rate limiting etc.

Testing

npm test

Deployment

There are three deployment options: npm global install, Docker, or clone-and-run. All three use the FHIRSMITH_DATA_DIR environment variable to locate the data directory.

npm Global Install

# Install globally
npm install -g fhirsmith
# Create a data directory
mkdir -p /var/lib/fhirsmith
cp node_modules/fhirsmith/config-template.json /var/lib/fhirsmith/config.json
# Edit config.json as needed# Set the data directory and runexport FHIRSMITH_DATA_DIR=/var/lib/fhirsmith
fhirsmith

Or run it inline:

FHIRSMITH_DATA_DIR=/var/lib/fhirsmith fhirsmith

Docker Installation

The server is available as a Docker image. Mount a host directory as the data directory:

# Pull the latest image
docker pull ghcr.io/healthintersections/fhirsmith:latest
# Create and populate data directory on host
mkdir -p /path/to/data
cp config-template.json /path/to/data/config.json
# Edit config.json as needed# Run with data directory mounted
docker run -d --name fhirsmith \
-p 3000:3000 \
-e FHIRSMITH_DATA_DIR=/app/data \
-v /path/to/data:/app/data \
ghcr.io/healthintersections/fhirsmith:latest

Available tags:

  • latest: Latest stable release
  • vX.Y.Z: Specific version (e.g., v1.0.0)
  • cibuild: Latest build from the main branch

Environment Variables

VariableDescriptionDefault
FHIRSMITH_DATA_DIRPath to the data directory./data
PORTServer port (overrides config)from config.json
NODE_ENVNode environmentproduction

Windows Installation

You can install as a windows service using windows-install.js. You might need to hack that.

Releases

This project follows Semantic Versioning and uses a CHANGELOG.md file to track changes.

What's in a Release

Each GitHub Release includes:

  • Release notes extracted from CHANGELOG.md
  • Source code archives (zip and tar.gz)
  • Docker images pushed to GitHub Container Registry:
    • ghcr.io/healthintersections/fhirsmith:latest
    • ghcr.io/healthintersections/fhirsmith:vX.Y.Z
    • ghcr.io/healthintersections/fhirsmith:X.Y.Z
  • npm package published to npmjs.org as fhirsmith(if you add this)

Creating a Release

GitHub Actions will automatically:

  • Run tests
  • Create a GitHub Release with notes from CHANGELOG.md
  • Build and publish Docker images with appropriate tags

Prerequisites:

  • All tests passing on main branch
  • CHANGELOG.md updated with changes

Steps:

  1. Update CHANGELOG.md with your changes under a new version section:
 ## [vX.Y.Z] - YYYY-MM-DD### Added- New feature description
### Changed- Change description
### Fixed- Bug fix description
### Tx Conformance Statement {copy content from text-cases-summary.txt}
  1. Update package.json & package-lock.json to have the same release version

  2. Commit your changes:

 git commit -m "Prepare release vX.Y.Z"
git push origin main:XXXXXX

or do it via a PR

  1. Tag and push the release:
 git tag vX.Y.Z
git push origin vX.Y.Z
  1. Monitor the release:

  2. Update package.json to have the next release version -SNAPSHOT

If a release fails:

  • Delete the tag: git tag -d vX.Y.Z && git push origin :refs/tags/vX.Y.Z
  • Fix the issue
  • Re-tag and push

Creating a Release

License

BSD-3

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Support

About

No description, website, or topics provided.

Resources

Security policy

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

984 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🔥 FHIRsmith - FHIR Server toolkit

This server provides a set of server-side services that are useful for the FHIR Community. The set of are two kinds of services:

Modules useful to anyone in the community

Services useful the community as a whole

Summary Statement

  • Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
  • Issues / Discussion: Use github issues
  • License: BSD-3
  • Contribution Policy: Make PRs. PRs have to pass all the tests
  • Security Information: See security.md

Build Status

CI BuildReleaseDocker

Note: In production, this server always runs behind an nginx reverse proxy, so there's no in-build support for SSL, rate limiting etc.

Quick Start

There are 4 executable programs:

  • the server (node server)
  • the terminology importer (node --max-old-space-size=8192 tx/importers/tx-import XXX) - see Doco
  • the test cases (npm test)
  • the test cases generater (node tx/tests/testcases-generator.js)

Unless you're developing, you only need the first two

FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note, though, that if you support FHIRsmith commercially as part of a managed service or product, you are required to be a Commercial Partner of HL7 - see (link to be provided).

Quick Start

  • Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
  • Figure out the data directory
  • Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
  • Run the server

For further details of these steps, read on

Data Directory

The server separates code from runtime data. All databases, caches, logs, and downloaded files are stored in a single data directory. The location is determined by:

  1. The FHIRSMITH_DATA_DIR environment variable (if set)
  2. Otherwise, defaults to ./data relative to the working directory (development set up)

The data directory contains (depending on which modules are in use):

  • config.json — server and module configuration
  • logs/ — server and nginx log files
  • terminology-cache/ — downloaded terminology packages and FHIR packages
  • packages/ — package server database
  • xig/ — XIG database
  • shl/ — SHL databases and certificates
  • registry/ — registry crawler data
  • publisher/ — publisher database and build workspace
  • token/ — token database

During development with a cloned repository, the data directory defaults to [root]/data (the test cases require this setup). When deployed via Docker or npm, the data directory is provided by the host — see Deployment below.

Prerequisites

  • Node.js 16+
  • NPM or Yarn
  • Java 17+ (for FHIR validator, also for the test cases)

Installation

These instructions are for Development. For deployment, see below.

# Clone the repository
git clone https://github.com/HealthIntersections/FHIRsmith
cd FHIRsmith
# Install dependencies
npm install
# Create required directories
mkdir -p data data/logs
# Copy example configuration
cp config.example.json data/config.json
# Edit configuration as needed
nano data/config.json

Each Module has it's own entry in the config, as described by the module

Basic Configuration

Create a config.json file in your data directory (use config-template.json as a starting point):

{
"hostName" : "[descriptive name for the server]",
"server": {
"port": 3000,
"cors": {
"origin": "*",
"credentials": true
}
},
"modules": {
// per modules...
}
}

Logging Configuration

Add a logging section to config.json to control log behaviour. All fields are optional and have sensible defaults:

{
"logging": {
"level": "info",
"console": true,
"consoleErrors": false,
"maxFiles": 14,
"maxSize": "50m",
"flushInterval": 2000,
"flushSize": 200
}
}
OptionDefaultDescription
level"info"Minimum level to log: error, warn, info, debug, or verbose
consoletrueWrite log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant
consoleErrorsfalseWhether error and warn levels appear on the console. When false, errors and warnings are written to the log file only
maxFiles14Number of daily log files to retain before old ones are deleted
maxSize0 (unlimited)Maximum size per log file before rotation. Accepts human-readable strings: "20m", "1g", or a raw byte count
flushInterval2000Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load
flushSize200Number of buffered log lines that trigger an immediate flush regardless of the timer

Log files are written to the logs/ subdirectory of the data directory as server-YYYY-MM-DD.log. A server.log symlink always points to the current day's file, so tail -f data/logs/server.log tracks the active log without needing to know the date.

Start the Server

# Development mode
npm run dev
# Production mode
npm start

The server will be available at http://localhost:{port} using the port specified in the config. In the production servers listed above, the server always sits behind an NGINX server which manages SSL, security, rate limiting etc.

Testing

npm test

Deployment

There are three deployment options: npm global install, Docker, or clone-and-run. All three use the FHIRSMITH_DATA_DIR environment variable to locate the data directory.

npm Global Install

# Install globally
npm install -g fhirsmith
# Create a data directory
mkdir -p /var/lib/fhirsmith
cp node_modules/fhirsmith/config-template.json /var/lib/fhirsmith/config.json
# Edit config.json as needed# Set the data directory and runexport FHIRSMITH_DATA_DIR=/var/lib/fhirsmith
fhirsmith

Or run it inline:

FHIRSMITH_DATA_DIR=/var/lib/fhirsmith fhirsmith

Docker Installation

The server is available as a Docker image. Mount a host directory as the data directory:

# Pull the latest image
docker pull ghcr.io/healthintersections/fhirsmith:latest
# Create and populate data directory on host
mkdir -p /path/to/data
cp config-template.json /path/to/data/config.json
# Edit config.json as needed# Run with data directory mounted
docker run -d --name fhirsmith \
-p 3000:3000 \
-e FHIRSMITH_DATA_DIR=/app/data \
-v /path/to/data:/app/data \
ghcr.io/healthintersections/fhirsmith:latest

Available tags:

  • latest: Latest stable release
  • vX.Y.Z: Specific version (e.g., v1.0.0)
  • cibuild: Latest build from the main branch

Environment Variables

VariableDescriptionDefault
FHIRSMITH_DATA_DIRPath to the data directory./data
PORTServer port (overrides config)from config.json
NODE_ENVNode environmentproduction

Windows Installation

You can install as a windows service using windows-install.js. You might need to hack that.

Releases

This project follows Semantic Versioning and uses a CHANGELOG.md file to track changes.

What's in a Release

Each GitHub Release includes:

  • Release notes extracted from CHANGELOG.md
  • Source code archives (zip and tar.gz)
  • Docker images pushed to GitHub Container Registry:
    • ghcr.io/healthintersections/fhirsmith:latest
    • ghcr.io/healthintersections/fhirsmith:vX.Y.Z
    • ghcr.io/healthintersections/fhirsmith:X.Y.Z
  • npm package published to npmjs.org as fhirsmith(if you add this)

Creating a Release

GitHub Actions will automatically:

  • Run tests
  • Create a GitHub Release with notes from CHANGELOG.md
  • Build and publish Docker images with appropriate tags

Prerequisites:

  • All tests passing on main branch
  • CHANGELOG.md updated with changes

Steps:

  1. Update CHANGELOG.md with your changes under a new version section:
 ## [vX.Y.Z] - YYYY-MM-DD### Added- New feature description
### Changed- Change description
### Fixed- Bug fix description
### Tx Conformance Statement {copy content from text-cases-summary.txt}
  1. Update package.json & package-lock.json to have the same release version

  2. Commit your changes:

 git commit -m "Prepare release vX.Y.Z"
git push origin main:XXXXXX

or do it via a PR

  1. Tag and push the release:
 git tag vX.Y.Z
git push origin vX.Y.Z
  1. Monitor the release:

  2. Update package.json to have the next release version -SNAPSHOT

If a release fails:

  • Delete the tag: git tag -d vX.Y.Z && git push origin :refs/tags/vX.Y.Z
  • Fix the issue
  • Re-tag and push

Creating a Release

License

BSD-3

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Support

About

No description, website, or topics provided.

Resources

Security policy

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

984 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🔥 FHIRsmith - FHIR Server toolkit

This server provides a set of server-side services that are useful for the FHIR Community. The set of are two kinds of services:

Modules useful to anyone in the community

Services useful the community as a whole

Summary Statement

  • Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
  • Issues / Discussion: Use github issues
  • License: BSD-3
  • Contribution Policy: Make PRs. PRs have to pass all the tests
  • Security Information: See security.md

Build Status

CI BuildReleaseDocker

Note: In production, this server always runs behind an nginx reverse proxy, so there's no in-build support for SSL, rate limiting etc.

Quick Start

There are 4 executable programs:

  • the server (node server)
  • the terminology importer (node --max-old-space-size=8192 tx/importers/tx-import XXX) - see Doco
  • the test cases (npm test)
  • the test cases generater (node tx/tests/testcases-generator.js)

Unless you're developing, you only need the first two

FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note, though, that if you support FHIRsmith commercially as part of a managed service or product, you are required to be a Commercial Partner of HL7 - see (link to be provided).

Quick Start

  • Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
  • Figure out the data directory
  • Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
  • Run the server

For further details of these steps, read on

Data Directory

The server separates code from runtime data. All databases, caches, logs, and downloaded files are stored in a single data directory. The location is determined by:

  1. The FHIRSMITH_DATA_DIR environment variable (if set)
  2. Otherwise, defaults to ./data relative to the working directory (development set up)

The data directory contains (depending on which modules are in use):

  • config.json — server and module configuration
  • logs/ — server and nginx log files
  • terminology-cache/ — downloaded terminology packages and FHIR packages
  • packages/ — package server database
  • xig/ — XIG database
  • shl/ — SHL databases and certificates
  • registry/ — registry crawler data
  • publisher/ — publisher database and build workspace
  • token/ — token database

During development with a cloned repository, the data directory defaults to [root]/data (the test cases require this setup). When deployed via Docker or npm, the data directory is provided by the host — see Deployment below.

Prerequisites

  • Node.js 16+
  • NPM or Yarn
  • Java 17+ (for FHIR validator, also for the test cases)

Installation

These instructions are for Development. For deployment, see below.

# Clone the repository
git clone https://github.com/HealthIntersections/FHIRsmith
cd FHIRsmith
# Install dependencies
npm install
# Create required directories
mkdir -p data data/logs
# Copy example configuration
cp config.example.json data/config.json
# Edit configuration as needed
nano data/config.json

Each Module has it's own entry in the config, as described by the module

Basic Configuration

Create a config.json file in your data directory (use config-template.json as a starting point):

{
"hostName" : "[descriptive name for the server]",
"server": {
"port": 3000,
"cors": {
"origin": "*",
"credentials": true
}
},
"modules": {
// per modules...
}
}

Logging Configuration

Add a logging section to config.json to control log behaviour. All fields are optional and have sensible defaults:

{
"logging": {
"level": "info",
"console": true,
"consoleErrors": false,
"maxFiles": 14,
"maxSize": "50m",
"flushInterval": 2000,
"flushSize": 200
}
}
OptionDefaultDescription
level"info"Minimum level to log: error, warn, info, debug, or verbose
consoletrueWrite log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant
consoleErrorsfalseWhether error and warn levels appear on the console. When false, errors and warnings are written to the log file only
maxFiles14Number of daily log files to retain before old ones are deleted
maxSize0 (unlimited)Maximum size per log file before rotation. Accepts human-readable strings: "20m", "1g", or a raw byte count
flushInterval2000Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load
flushSize200Number of buffered log lines that trigger an immediate flush regardless of the timer

Log files are written to the logs/ subdirectory of the data directory as server-YYYY-MM-DD.log. A server.log symlink always points to the current day's file, so tail -f data/logs/server.log tracks the active log without needing to know the date.

Start the Server

# Development mode
npm run dev
# Production mode
npm start

The server will be available at http://localhost:{port} using the port specified in the config. In the production servers listed above, the server always sits behind an NGINX server which manages SSL, security, rate limiting etc.

Testing

npm test

Deployment

There are three deployment options: npm global install, Docker, or clone-and-run. All three use the FHIRSMITH_DATA_DIR environment variable to locate the data directory.

npm Global Install

# Install globally
npm install -g fhirsmith
# Create a data directory
mkdir -p /var/lib/fhirsmith
cp node_modules/fhirsmith/config-template.json /var/lib/fhirsmith/config.json
# Edit config.json as needed# Set the data directory and runexport FHIRSMITH_DATA_DIR=/var/lib/fhirsmith
fhirsmith

Or run it inline:

FHIRSMITH_DATA_DIR=/var/lib/fhirsmith fhirsmith

Docker Installation

The server is available as a Docker image. Mount a host directory as the data directory:

# Pull the latest image
docker pull ghcr.io/healthintersections/fhirsmith:latest
# Create and populate data directory on host
mkdir -p /path/to/data
cp config-template.json /path/to/data/config.json
# Edit config.json as needed# Run with data directory mounted
docker run -d --name fhirsmith \
-p 3000:3000 \
-e FHIRSMITH_DATA_DIR=/app/data \
-v /path/to/data:/app/data \
ghcr.io/healthintersections/fhirsmith:latest

Available tags:

  • latest: Latest stable release
  • vX.Y.Z: Specific version (e.g., v1.0.0)
  • cibuild: Latest build from the main branch

Environment Variables

VariableDescriptionDefault
FHIRSMITH_DATA_DIRPath to the data directory./data
PORTServer port (overrides config)from config.json
NODE_ENVNode environmentproduction

Windows Installation

You can install as a windows service using windows-install.js. You might need to hack that.

Releases

This project follows Semantic Versioning and uses a CHANGELOG.md file to track changes.

What's in a Release

Each GitHub Release includes:

  • Release notes extracted from CHANGELOG.md
  • Source code archives (zip and tar.gz)
  • Docker images pushed to GitHub Container Registry:
    • ghcr.io/healthintersections/fhirsmith:latest
    • ghcr.io/healthintersections/fhirsmith:vX.Y.Z
    • ghcr.io/healthintersections/fhirsmith:X.Y.Z
  • npm package published to npmjs.org as fhirsmith(if you add this)

Creating a Release

GitHub Actions will automatically:

  • Run tests
  • Create a GitHub Release with notes from CHANGELOG.md
  • Build and publish Docker images with appropriate tags

Prerequisites:

  • All tests passing on main branch
  • CHANGELOG.md updated with changes

Steps:

  1. Update CHANGELOG.md with your changes under a new version section:
 ## [vX.Y.Z] - YYYY-MM-DD### Added- New feature description
### Changed- Change description
### Fixed- Bug fix description
### Tx Conformance Statement {copy content from text-cases-summary.txt}
  1. Update package.json & package-lock.json to have the same release version

  2. Commit your changes:

 git commit -m "Prepare release vX.Y.Z"
git push origin main:XXXXXX

or do it via a PR

  1. Tag and push the release:
 git tag vX.Y.Z
git push origin vX.Y.Z
  1. Monitor the release:

  2. Update package.json to have the next release version -SNAPSHOT

If a release fails:

  • Delete the tag: git tag -d vX.Y.Z && git push origin :refs/tags/vX.Y.Z
  • Fix the issue
  • Re-tag and push

Creating a Release

License

BSD-3

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Support

About

No description, website, or topics provided.

Resources

Security policy

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

984 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🔥 FHIRsmith - FHIR Server toolkit

This server provides a set of server-side services that are useful for the FHIR Community. The set of are two kinds of services:

Modules useful to anyone in the community

Services useful the community as a whole

Summary Statement

  • Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
  • Issues / Discussion: Use github issues
  • License: BSD-3
  • Contribution Policy: Make PRs. PRs have to pass all the tests
  • Security Information: See security.md

Build Status

CI BuildReleaseDocker

Note: In production, this server always runs behind an nginx reverse proxy, so there's no in-build support for SSL, rate limiting etc.

Quick Start

There are 4 executable programs:

  • the server (node server)
  • the terminology importer (node --max-old-space-size=8192 tx/importers/tx-import XXX) - see Doco
  • the test cases (npm test)
  • the test cases generater (node tx/tests/testcases-generator.js)

Unless you're developing, you only need the first two

FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note, though, that if you support FHIRsmith commercially as part of a managed service or product, you are required to be a Commercial Partner of HL7 - see (link to be provided).

Quick Start

  • Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
  • Figure out the data directory
  • Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
  • Run the server

For further details of these steps, read on

Data Directory

The server separates code from runtime data. All databases, caches, logs, and downloaded files are stored in a single data directory. The location is determined by:

  1. The FHIRSMITH_DATA_DIR environment variable (if set)
  2. Otherwise, defaults to ./data relative to the working directory (development set up)

The data directory contains (depending on which modules are in use):

  • config.json — server and module configuration
  • logs/ — server and nginx log files
  • terminology-cache/ — downloaded terminology packages and FHIR packages
  • packages/ — package server database
  • xig/ — XIG database
  • shl/ — SHL databases and certificates
  • registry/ — registry crawler data
  • publisher/ — publisher database and build workspace
  • token/ — token database

During development with a cloned repository, the data directory defaults to [root]/data (the test cases require this setup). When deployed via Docker or npm, the data directory is provided by the host — see Deployment below.

Prerequisites

  • Node.js 16+
  • NPM or Yarn
  • Java 17+ (for FHIR validator, also for the test cases)

Installation

These instructions are for Development. For deployment, see below.

# Clone the repository
git clone https://github.com/HealthIntersections/FHIRsmith
cd FHIRsmith
# Install dependencies
npm install
# Create required directories
mkdir -p data data/logs
# Copy example configuration
cp config.example.json data/config.json
# Edit configuration as needed
nano data/config.json

Each Module has it's own entry in the config, as described by the module

Basic Configuration

Create a config.json file in your data directory (use config-template.json as a starting point):

{
"hostName" : "[descriptive name for the server]",
"server": {
"port": 3000,
"cors": {
"origin": "*",
"credentials": true
}
},
"modules": {
// per modules...
}
}

Logging Configuration

Add a logging section to config.json to control log behaviour. All fields are optional and have sensible defaults:

{
"logging": {
"level": "info",
"console": true,
"consoleErrors": false,
"maxFiles": 14,
"maxSize": "50m",
"flushInterval": 2000,
"flushSize": 200
}
}
OptionDefaultDescription
level"info"Minimum level to log: error, warn, info, debug, or verbose
consoletrueWrite log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant
consoleErrorsfalseWhether error and warn levels appear on the console. When false, errors and warnings are written to the log file only
maxFiles14Number of daily log files to retain before old ones are deleted
maxSize0 (unlimited)Maximum size per log file before rotation. Accepts human-readable strings: "20m", "1g", or a raw byte count
flushInterval2000Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load
flushSize200Number of buffered log lines that trigger an immediate flush regardless of the timer

Log files are written to the logs/ subdirectory of the data directory as server-YYYY-MM-DD.log. A server.log symlink always points to the current day's file, so tail -f data/logs/server.log tracks the active log without needing to know the date.

Start the Server

# Development mode
npm run dev
# Production mode
npm start

The server will be available at http://localhost:{port} using the port specified in the config. In the production servers listed above, the server always sits behind an NGINX server which manages SSL, security, rate limiting etc.

Testing

npm test

Deployment

There are three deployment options: npm global install, Docker, or clone-and-run. All three use the FHIRSMITH_DATA_DIR environment variable to locate the data directory.

npm Global Install

# Install globally
npm install -g fhirsmith
# Create a data directory
mkdir -p /var/lib/fhirsmith
cp node_modules/fhirsmith/config-template.json /var/lib/fhirsmith/config.json
# Edit config.json as needed# Set the data directory and runexport FHIRSMITH_DATA_DIR=/var/lib/fhirsmith
fhirsmith

Or run it inline:

FHIRSMITH_DATA_DIR=/var/lib/fhirsmith fhirsmith

Docker Installation

The server is available as a Docker image. Mount a host directory as the data directory:

# Pull the latest image
docker pull ghcr.io/healthintersections/fhirsmith:latest
# Create and populate data directory on host
mkdir -p /path/to/data
cp config-template.json /path/to/data/config.json
# Edit config.json as needed# Run with data directory mounted
docker run -d --name fhirsmith \
-p 3000:3000 \
-e FHIRSMITH_DATA_DIR=/app/data \
-v /path/to/data:/app/data \
ghcr.io/healthintersections/fhirsmith:latest

Available tags:

  • latest: Latest stable release
  • vX.Y.Z: Specific version (e.g., v1.0.0)
  • cibuild: Latest build from the main branch

Environment Variables

VariableDescriptionDefault
FHIRSMITH_DATA_DIRPath to the data directory./data
PORTServer port (overrides config)from config.json
NODE_ENVNode environmentproduction

Windows Installation

You can install as a windows service using windows-install.js. You might need to hack that.

Releases

This project follows Semantic Versioning and uses a CHANGELOG.md file to track changes.

What's in a Release

Each GitHub Release includes:

  • Release notes extracted from CHANGELOG.md
  • Source code archives (zip and tar.gz)
  • Docker images pushed to GitHub Container Registry:
    • ghcr.io/healthintersections/fhirsmith:latest
    • ghcr.io/healthintersections/fhirsmith:vX.Y.Z
    • ghcr.io/healthintersections/fhirsmith:X.Y.Z
  • npm package published to npmjs.org as fhirsmith(if you add this)

Creating a Release

GitHub Actions will automatically:

  • Run tests
  • Create a GitHub Release with notes from CHANGELOG.md
  • Build and publish Docker images with appropriate tags

Prerequisites:

  • All tests passing on main branch
  • CHANGELOG.md updated with changes

Steps:

  1. Update CHANGELOG.md with your changes under a new version section:
 ## [vX.Y.Z] - YYYY-MM-DD### Added- New feature description
### Changed- Change description
### Fixed- Bug fix description
### Tx Conformance Statement {copy content from text-cases-summary.txt}
  1. Update package.json & package-lock.json to have the same release version

  2. Commit your changes:

 git commit -m "Prepare release vX.Y.Z"
git push origin main:XXXXXX

or do it via a PR

  1. Tag and push the release:
 git tag vX.Y.Z
git push origin vX.Y.Z
  1. Monitor the release:

  2. Update package.json to have the next release version -SNAPSHOT

If a release fails:

  • Delete the tag: git tag -d vX.Y.Z && git push origin :refs/tags/vX.Y.Z
  • Fix the issue
  • Re-tag and push

Creating a Release

License

BSD-3

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Support

About

No description, website, or topics provided.

Resources

Security policy

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

984 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🔥 FHIRsmith - FHIR Server toolkit

This server provides a set of server-side services that are useful for the FHIR Community. The set of are two kinds of services:

Modules useful to anyone in the community

Services useful the community as a whole

Summary Statement

  • Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
  • Issues / Discussion: Use github issues
  • License: BSD-3
  • Contribution Policy: Make PRs. PRs have to pass all the tests
  • Security Information: See security.md

Build Status

CI BuildReleaseDocker

Note: In production, this server always runs behind an nginx reverse proxy, so there's no in-build support for SSL, rate limiting etc.

Quick Start

There are 4 executable programs:

  • the server (node server)
  • the terminology importer (node --max-old-space-size=8192 tx/importers/tx-import XXX) - see Doco
  • the test cases (npm test)
  • the test cases generater (node tx/tests/testcases-generator.js)

Unless you're developing, you only need the first two

FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note, though, that if you support FHIRsmith commercially as part of a managed service or product, you are required to be a Commercial Partner of HL7 - see (link to be provided).

Quick Start

  • Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
  • Figure out the data directory
  • Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
  • Run the server

For further details of these steps, read on

Data Directory

The server separates code from runtime data. All databases, caches, logs, and downloaded files are stored in a single data directory. The location is determined by:

  1. The FHIRSMITH_DATA_DIR environment variable (if set)
  2. Otherwise, defaults to ./data relative to the working directory (development set up)

The data directory contains (depending on which modules are in use):

  • config.json — server and module configuration
  • logs/ — server and nginx log files
  • terminology-cache/ — downloaded terminology packages and FHIR packages
  • packages/ — package server database
  • xig/ — XIG database
  • shl/ — SHL databases and certificates
  • registry/ — registry crawler data
  • publisher/ — publisher database and build workspace
  • token/ — token database

During development with a cloned repository, the data directory defaults to [root]/data (the test cases require this setup). When deployed via Docker or npm, the data directory is provided by the host — see Deployment below.

Prerequisites

  • Node.js 16+
  • NPM or Yarn
  • Java 17+ (for FHIR validator, also for the test cases)

Installation

These instructions are for Development. For deployment, see below.

# Clone the repository
git clone https://github.com/HealthIntersections/FHIRsmith
cd FHIRsmith
# Install dependencies
npm install
# Create required directories
mkdir -p data data/logs
# Copy example configuration
cp config.example.json data/config.json
# Edit configuration as needed
nano data/config.json

Each Module has it's own entry in the config, as described by the module

Basic Configuration

Create a config.json file in your data directory (use config-template.json as a starting point):

{
"hostName" : "[descriptive name for the server]",
"server": {
"port": 3000,
"cors": {
"origin": "*",
"credentials": true
}
},
"modules": {
// per modules...
}
}

Logging Configuration

Add a logging section to config.json to control log behaviour. All fields are optional and have sensible defaults:

{
"logging": {
"level": "info",
"console": true,
"consoleErrors": false,
"maxFiles": 14,
"maxSize": "50m",
"flushInterval": 2000,
"flushSize": 200
}
}
OptionDefaultDescription
level"info"Minimum level to log: error, warn, info, debug, or verbose
consoletrueWrite log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant
consoleErrorsfalseWhether error and warn levels appear on the console. When false, errors and warnings are written to the log file only
maxFiles14Number of daily log files to retain before old ones are deleted
maxSize0 (unlimited)Maximum size per log file before rotation. Accepts human-readable strings: "20m", "1g", or a raw byte count
flushInterval2000Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load
flushSize200Number of buffered log lines that trigger an immediate flush regardless of the timer

Log files are written to the logs/ subdirectory of the data directory as server-YYYY-MM-DD.log. A server.log symlink always points to the current day's file, so tail -f data/logs/server.log tracks the active log without needing to know the date.

Start the Server

# Development mode
npm run dev
# Production mode
npm start

The server will be available at http://localhost:{port} using the port specified in the config. In the production servers listed above, the server always sits behind an NGINX server which manages SSL, security, rate limiting etc.

Testing

npm test

Deployment

There are three deployment options: npm global install, Docker, or clone-and-run. All three use the FHIRSMITH_DATA_DIR environment variable to locate the data directory.

npm Global Install

# Install globally
npm install -g fhirsmith
# Create a data directory
mkdir -p /var/lib/fhirsmith
cp node_modules/fhirsmith/config-template.json /var/lib/fhirsmith/config.json
# Edit config.json as needed# Set the data directory and runexport FHIRSMITH_DATA_DIR=/var/lib/fhirsmith
fhirsmith

Or run it inline:

FHIRSMITH_DATA_DIR=/var/lib/fhirsmith fhirsmith

Docker Installation

The server is available as a Docker image. Mount a host directory as the data directory:

# Pull the latest image
docker pull ghcr.io/healthintersections/fhirsmith:latest
# Create and populate data directory on host
mkdir -p /path/to/data
cp config-template.json /path/to/data/config.json
# Edit config.json as needed# Run with data directory mounted
docker run -d --name fhirsmith \
-p 3000:3000 \
-e FHIRSMITH_DATA_DIR=/app/data \
-v /path/to/data:/app/data \
ghcr.io/healthintersections/fhirsmith:latest

Available tags:

  • latest: Latest stable release
  • vX.Y.Z: Specific version (e.g., v1.0.0)
  • cibuild: Latest build from the main branch

Environment Variables

VariableDescriptionDefault
FHIRSMITH_DATA_DIRPath to the data directory./data
PORTServer port (overrides config)from config.json
NODE_ENVNode environmentproduction

Windows Installation

You can install as a windows service using windows-install.js. You might need to hack that.

Releases

This project follows Semantic Versioning and uses a CHANGELOG.md file to track changes.

What's in a Release

Each GitHub Release includes:

  • Release notes extracted from CHANGELOG.md
  • Source code archives (zip and tar.gz)
  • Docker images pushed to GitHub Container Registry:
    • ghcr.io/healthintersections/fhirsmith:latest
    • ghcr.io/healthintersections/fhirsmith:vX.Y.Z
    • ghcr.io/healthintersections/fhirsmith:X.Y.Z
  • npm package published to npmjs.org as fhirsmith(if you add this)

Creating a Release

GitHub Actions will automatically:

  • Run tests
  • Create a GitHub Release with notes from CHANGELOG.md
  • Build and publish Docker images with appropriate tags

Prerequisites:

  • All tests passing on main branch
  • CHANGELOG.md updated with changes

Steps:

  1. Update CHANGELOG.md with your changes under a new version section:
 ## [vX.Y.Z] - YYYY-MM-DD### Added- New feature description
### Changed- Change description
### Fixed- Bug fix description
### Tx Conformance Statement {copy content from text-cases-summary.txt}
  1. Update package.json & package-lock.json to have the same release version

  2. Commit your changes:

 git commit -m "Prepare release vX.Y.Z"
git push origin main:XXXXXX

or do it via a PR

  1. Tag and push the release:
 git tag vX.Y.Z
git push origin vX.Y.Z
  1. Monitor the release:

  2. Update package.json to have the next release version -SNAPSHOT

If a release fails:

  • Delete the tag: git tag -d vX.Y.Z && git push origin :refs/tags/vX.Y.Z
  • Fix the issue
  • Re-tag and push

Creating a Release

License

BSD-3

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Support

About

No description, website, or topics provided.

Resources

Security policy

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

984 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🔥 FHIRsmith - FHIR Server toolkit

This server provides a set of server-side services that are useful for the FHIR Community. The set of are two kinds of services:

Modules useful to anyone in the community

Services useful the community as a whole

Summary Statement

  • Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
  • Issues / Discussion: Use github issues
  • License: BSD-3
  • Contribution Policy: Make PRs. PRs have to pass all the tests
  • Security Information: See security.md

Build Status

CI BuildReleaseDocker

Note: In production, this server always runs behind an nginx reverse proxy, so there's no in-build support for SSL, rate limiting etc.

Quick Start

There are 4 executable programs:

  • the server (node server)
  • the terminology importer (node --max-old-space-size=8192 tx/importers/tx-import XXX) - see Doco
  • the test cases (npm test)
  • the test cases generater (node tx/tests/testcases-generator.js)

Unless you're developing, you only need the first two

FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note, though, that if you support FHIRsmith commercially as part of a managed service or product, you are required to be a Commercial Partner of HL7 - see (link to be provided).

Quick Start

  • Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
  • Figure out the data directory
  • Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
  • Run the server

For further details of these steps, read on

Data Directory

The server separates code from runtime data. All databases, caches, logs, and downloaded files are stored in a single data directory. The location is determined by:

  1. The FHIRSMITH_DATA_DIR environment variable (if set)
  2. Otherwise, defaults to ./data relative to the working directory (development set up)

The data directory contains (depending on which modules are in use):

  • config.json — server and module configuration
  • logs/ — server and nginx log files
  • terminology-cache/ — downloaded terminology packages and FHIR packages
  • packages/ — package server database
  • xig/ — XIG database
  • shl/ — SHL databases and certificates
  • registry/ — registry crawler data
  • publisher/ — publisher database and build workspace
  • token/ — token database

During development with a cloned repository, the data directory defaults to [root]/data (the test cases require this setup). When deployed via Docker or npm, the data directory is provided by the host — see Deployment below.

Prerequisites

  • Node.js 16+
  • NPM or Yarn
  • Java 17+ (for FHIR validator, also for the test cases)

Installation

These instructions are for Development. For deployment, see below.

# Clone the repository
git clone https://github.com/HealthIntersections/FHIRsmith
cd FHIRsmith
# Install dependencies
npm install
# Create required directories
mkdir -p data data/logs
# Copy example configuration
cp config.example.json data/config.json
# Edit configuration as needed
nano data/config.json

Each Module has it's own entry in the config, as described by the module

Basic Configuration

Create a config.json file in your data directory (use config-template.json as a starting point):

{
"hostName" : "[descriptive name for the server]",
"server": {
"port": 3000,
"cors": {
"origin": "*",
"credentials": true
}
},
"modules": {
// per modules...
}
}

Logging Configuration

Add a logging section to config.json to control log behaviour. All fields are optional and have sensible defaults:

{
"logging": {
"level": "info",
"console": true,
"consoleErrors": false,
"maxFiles": 14,
"maxSize": "50m",
"flushInterval": 2000,
"flushSize": 200
}
}
OptionDefaultDescription
level"info"Minimum level to log: error, warn, info, debug, or verbose
consoletrueWrite log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant
consoleErrorsfalseWhether error and warn levels appear on the console. When false, errors and warnings are written to the log file only
maxFiles14Number of daily log files to retain before old ones are deleted
maxSize0 (unlimited)Maximum size per log file before rotation. Accepts human-readable strings: "20m", "1g", or a raw byte count
flushInterval2000Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load
flushSize200Number of buffered log lines that trigger an immediate flush regardless of the timer

Log files are written to the logs/ subdirectory of the data directory as server-YYYY-MM-DD.log. A server.log symlink always points to the current day's file, so tail -f data/logs/server.log tracks the active log without needing to know the date.

Start the Server

# Development mode
npm run dev
# Production mode
npm start

The server will be available at http://localhost:{port} using the port specified in the config. In the production servers listed above, the server always sits behind an NGINX server which manages SSL, security, rate limiting etc.

Testing

npm test

Deployment

There are three deployment options: npm global install, Docker, or clone-and-run. All three use the FHIRSMITH_DATA_DIR environment variable to locate the data directory.

npm Global Install

# Install globally
npm install -g fhirsmith
# Create a data directory
mkdir -p /var/lib/fhirsmith
cp node_modules/fhirsmith/config-template.json /var/lib/fhirsmith/config.json
# Edit config.json as needed# Set the data directory and runexport FHIRSMITH_DATA_DIR=/var/lib/fhirsmith
fhirsmith

Or run it inline:

FHIRSMITH_DATA_DIR=/var/lib/fhirsmith fhirsmith

Docker Installation

The server is available as a Docker image. Mount a host directory as the data directory:

# Pull the latest image
docker pull ghcr.io/healthintersections/fhirsmith:latest
# Create and populate data directory on host
mkdir -p /path/to/data
cp config-template.json /path/to/data/config.json
# Edit config.json as needed# Run with data directory mounted
docker run -d --name fhirsmith \
-p 3000:3000 \
-e FHIRSMITH_DATA_DIR=/app/data \
-v /path/to/data:/app/data \
ghcr.io/healthintersections/fhirsmith:latest

Available tags:

  • latest: Latest stable release
  • vX.Y.Z: Specific version (e.g., v1.0.0)
  • cibuild: Latest build from the main branch

Environment Variables

VariableDescriptionDefault
FHIRSMITH_DATA_DIRPath to the data directory./data
PORTServer port (overrides config)from config.json
NODE_ENVNode environmentproduction

Windows Installation

You can install as a windows service using windows-install.js. You might need to hack that.

Releases

This project follows Semantic Versioning and uses a CHANGELOG.md file to track changes.

What's in a Release

Each GitHub Release includes:

  • Release notes extracted from CHANGELOG.md
  • Source code archives (zip and tar.gz)
  • Docker images pushed to GitHub Container Registry:
    • ghcr.io/healthintersections/fhirsmith:latest
    • ghcr.io/healthintersections/fhirsmith:vX.Y.Z
    • ghcr.io/healthintersections/fhirsmith:X.Y.Z
  • npm package published to npmjs.org as fhirsmith(if you add this)

Creating a Release

GitHub Actions will automatically:

  • Run tests
  • Create a GitHub Release with notes from CHANGELOG.md
  • Build and publish Docker images with appropriate tags

Prerequisites:

  • All tests passing on main branch
  • CHANGELOG.md updated with changes

Steps:

  1. Update CHANGELOG.md with your changes under a new version section:
 ## [vX.Y.Z] - YYYY-MM-DD### Added- New feature description
### Changed- Change description
### Fixed- Bug fix description
### Tx Conformance Statement {copy content from text-cases-summary.txt}
  1. Update package.json & package-lock.json to have the same release version

  2. Commit your changes:

 git commit -m "Prepare release vX.Y.Z"
git push origin main:XXXXXX

or do it via a PR

  1. Tag and push the release:
 git tag vX.Y.Z
git push origin vX.Y.Z
  1. Monitor the release:

  2. Update package.json to have the next release version -SNAPSHOT

If a release fails:

  • Delete the tag: git tag -d vX.Y.Z && git push origin :refs/tags/vX.Y.Z
  • Fix the issue
  • Re-tag and push

Creating a Release

License

BSD-3

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Support

About

No description, website, or topics provided.

Resources

Security policy

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

984 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🔥 FHIRsmith - FHIR Server toolkit

This server provides a set of server-side services that are useful for the FHIR Community. The set of are two kinds of services:

Modules useful to anyone in the community

Services useful the community as a whole

Summary Statement

  • Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
  • Issues / Discussion: Use github issues
  • License: BSD-3
  • Contribution Policy: Make PRs. PRs have to pass all the tests
  • Security Information: See security.md

Build Status

CI BuildReleaseDocker

Note: In production, this server always runs behind an nginx reverse proxy, so there's no in-build support for SSL, rate limiting etc.

Quick Start

There are 4 executable programs:

  • the server (node server)
  • the terminology importer (node --max-old-space-size=8192 tx/importers/tx-import XXX) - see Doco
  • the test cases (npm test)
  • the test cases generater (node tx/tests/testcases-generator.js)

Unless you're developing, you only need the first two

FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note, though, that if you support FHIRsmith commercially as part of a managed service or product, you are required to be a Commercial Partner of HL7 - see (link to be provided).

Quick Start

  • Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
  • Figure out the data directory
  • Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
  • Run the server

For further details of these steps, read on

Data Directory

The server separates code from runtime data. All databases, caches, logs, and downloaded files are stored in a single data directory. The location is determined by:

  1. The FHIRSMITH_DATA_DIR environment variable (if set)
  2. Otherwise, defaults to ./data relative to the working directory (development set up)

The data directory contains (depending on which modules are in use):

  • config.json — server and module configuration
  • logs/ — server and nginx log files
  • terminology-cache/ — downloaded terminology packages and FHIR packages
  • packages/ — package server database
  • xig/ — XIG database
  • shl/ — SHL databases and certificates
  • registry/ — registry crawler data
  • publisher/ — publisher database and build workspace
  • token/ — token database

During development with a cloned repository, the data directory defaults to [root]/data (the test cases require this setup). When deployed via Docker or npm, the data directory is provided by the host — see Deployment below.

Prerequisites

  • Node.js 16+
  • NPM or Yarn
  • Java 17+ (for FHIR validator, also for the test cases)

Installation

These instructions are for Development. For deployment, see below.

# Clone the repository
git clone https://github.com/HealthIntersections/FHIRsmith
cd FHIRsmith
# Install dependencies
npm install
# Create required directories
mkdir -p data data/logs
# Copy example configuration
cp config.example.json data/config.json
# Edit configuration as needed
nano data/config.json

Each Module has it's own entry in the config, as described by the module

Basic Configuration

Create a config.json file in your data directory (use config-template.json as a starting point):

{
"hostName" : "[descriptive name for the server]",
"server": {
"port": 3000,
"cors": {
"origin": "*",
"credentials": true
}
},
"modules": {
// per modules...
}
}

Logging Configuration

Add a logging section to config.json to control log behaviour. All fields are optional and have sensible defaults:

{
"logging": {
"level": "info",
"console": true,
"consoleErrors": false,
"maxFiles": 14,
"maxSize": "50m",
"flushInterval": 2000,
"flushSize": 200
}
}
OptionDefaultDescription
level"info"Minimum level to log: error, warn, info, debug, or verbose
consoletrueWrite log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant
consoleErrorsfalseWhether error and warn levels appear on the console. When false, errors and warnings are written to the log file only
maxFiles14Number of daily log files to retain before old ones are deleted
maxSize0 (unlimited)Maximum size per log file before rotation. Accepts human-readable strings: "20m", "1g", or a raw byte count
flushInterval2000Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load
flushSize200Number of buffered log lines that trigger an immediate flush regardless of the timer

Log files are written to the logs/ subdirectory of the data directory as server-YYYY-MM-DD.log. A server.log symlink always points to the current day's file, so tail -f data/logs/server.log tracks the active log without needing to know the date.

Start the Server

# Development mode
npm run dev
# Production mode
npm start

The server will be available at http://localhost:{port} using the port specified in the config. In the production servers listed above, the server always sits behind an NGINX server which manages SSL, security, rate limiting etc.

Testing

npm test

Deployment

There are three deployment options: npm global install, Docker, or clone-and-run. All three use the FHIRSMITH_DATA_DIR environment variable to locate the data directory.

npm Global Install

# Install globally
npm install -g fhirsmith
# Create a data directory
mkdir -p /var/lib/fhirsmith
cp node_modules/fhirsmith/config-template.json /var/lib/fhirsmith/config.json
# Edit config.json as needed# Set the data directory and runexport FHIRSMITH_DATA_DIR=/var/lib/fhirsmith
fhirsmith

Or run it inline:

FHIRSMITH_DATA_DIR=/var/lib/fhirsmith fhirsmith

Docker Installation

The server is available as a Docker image. Mount a host directory as the data directory:

# Pull the latest image
docker pull ghcr.io/healthintersections/fhirsmith:latest
# Create and populate data directory on host
mkdir -p /path/to/data
cp config-template.json /path/to/data/config.json
# Edit config.json as needed# Run with data directory mounted
docker run -d --name fhirsmith \
-p 3000:3000 \
-e FHIRSMITH_DATA_DIR=/app/data \
-v /path/to/data:/app/data \
ghcr.io/healthintersections/fhirsmith:latest

Available tags:

  • latest: Latest stable release
  • vX.Y.Z: Specific version (e.g., v1.0.0)
  • cibuild: Latest build from the main branch

Environment Variables

VariableDescriptionDefault
FHIRSMITH_DATA_DIRPath to the data directory./data
PORTServer port (overrides config)from config.json
NODE_ENVNode environmentproduction

Windows Installation

You can install as a windows service using windows-install.js. You might need to hack that.

Releases

This project follows Semantic Versioning and uses a CHANGELOG.md file to track changes.

What's in a Release

Each GitHub Release includes:

  • Release notes extracted from CHANGELOG.md
  • Source code archives (zip and tar.gz)
  • Docker images pushed to GitHub Container Registry:
    • ghcr.io/healthintersections/fhirsmith:latest
    • ghcr.io/healthintersections/fhirsmith:vX.Y.Z
    • ghcr.io/healthintersections/fhirsmith:X.Y.Z
  • npm package published to npmjs.org as fhirsmith(if you add this)

Creating a Release

GitHub Actions will automatically:

  • Run tests
  • Create a GitHub Release with notes from CHANGELOG.md
  • Build and publish Docker images with appropriate tags

Prerequisites:

  • All tests passing on main branch
  • CHANGELOG.md updated with changes

Steps:

  1. Update CHANGELOG.md with your changes under a new version section:
 ## [vX.Y.Z] - YYYY-MM-DD### Added- New feature description
### Changed- Change description
### Fixed- Bug fix description
### Tx Conformance Statement {copy content from text-cases-summary.txt}
  1. Update package.json & package-lock.json to have the same release version

  2. Commit your changes:

 git commit -m "Prepare release vX.Y.Z"
git push origin main:XXXXXX

or do it via a PR

  1. Tag and push the release:
 git tag vX.Y.Z
git push origin vX.Y.Z
  1. Monitor the release:

  2. Update package.json to have the next release version -SNAPSHOT

If a release fails:

  • Delete the tag: git tag -d vX.Y.Z && git push origin :refs/tags/vX.Y.Z
  • Fix the issue
  • Re-tag and push

Creating a Release

License

BSD-3

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Support

About

No description, website, or topics provided.

Resources

Security policy

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

984 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🔥 FHIRsmith - FHIR Server toolkit

This server provides a set of server-side services that are useful for the FHIR Community. The set of are two kinds of services:

Modules useful to anyone in the community

Services useful the community as a whole

Summary Statement

  • Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
  • Issues / Discussion: Use github issues
  • License: BSD-3
  • Contribution Policy: Make PRs. PRs have to pass all the tests
  • Security Information: See security.md

Build Status

CI BuildReleaseDocker

Note: In production, this server always runs behind an nginx reverse proxy, so there's no in-build support for SSL, rate limiting etc.

Quick Start

There are 4 executable programs:

  • the server (node server)
  • the terminology importer (node --max-old-space-size=8192 tx/importers/tx-import XXX) - see Doco
  • the test cases (npm test)
  • the test cases generater (node tx/tests/testcases-generator.js)

Unless you're developing, you only need the first two

FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note, though, that if you support FHIRsmith commercially as part of a managed service or product, you are required to be a Commercial Partner of HL7 - see (link to be provided).

Quick Start

  • Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
  • Figure out the data directory
  • Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
  • Run the server

For further details of these steps, read on

Data Directory

The server separates code from runtime data. All databases, caches, logs, and downloaded files are stored in a single data directory. The location is determined by:

  1. The FHIRSMITH_DATA_DIR environment variable (if set)
  2. Otherwise, defaults to ./data relative to the working directory (development set up)

The data directory contains (depending on which modules are in use):

  • config.json — server and module configuration
  • logs/ — server and nginx log files
  • terminology-cache/ — downloaded terminology packages and FHIR packages
  • packages/ — package server database
  • xig/ — XIG database
  • shl/ — SHL databases and certificates
  • registry/ — registry crawler data
  • publisher/ — publisher database and build workspace
  • token/ — token database

During development with a cloned repository, the data directory defaults to [root]/data (the test cases require this setup). When deployed via Docker or npm, the data directory is provided by the host — see Deployment below.

Prerequisites

  • Node.js 16+
  • NPM or Yarn
  • Java 17+ (for FHIR validator, also for the test cases)

Installation

These instructions are for Development. For deployment, see below.

# Clone the repository
git clone https://github.com/HealthIntersections/FHIRsmith
cd FHIRsmith
# Install dependencies
npm install
# Create required directories
mkdir -p data data/logs
# Copy example configuration
cp config.example.json data/config.json
# Edit configuration as needed
nano data/config.json

Each Module has it's own entry in the config, as described by the module

Basic Configuration

Create a config.json file in your data directory (use config-template.json as a starting point):

{
"hostName" : "[descriptive name for the server]",
"server": {
"port": 3000,
"cors": {
"origin": "*",
"credentials": true
}
},
"modules": {
// per modules...
}
}

Logging Configuration

Add a logging section to config.json to control log behaviour. All fields are optional and have sensible defaults:

{
"logging": {
"level": "info",
"console": true,
"consoleErrors": false,
"maxFiles": 14,
"maxSize": "50m",
"flushInterval": 2000,
"flushSize": 200
}
}
OptionDefaultDescription
level"info"Minimum level to log: error, warn, info, debug, or verbose
consoletrueWrite log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant
consoleErrorsfalseWhether error and warn levels appear on the console. When false, errors and warnings are written to the log file only
maxFiles14Number of daily log files to retain before old ones are deleted
maxSize0 (unlimited)Maximum size per log file before rotation. Accepts human-readable strings: "20m", "1g", or a raw byte count
flushInterval2000Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load
flushSize200Number of buffered log lines that trigger an immediate flush regardless of the timer

Log files are written to the logs/ subdirectory of the data directory as server-YYYY-MM-DD.log. A server.log symlink always points to the current day's file, so tail -f data/logs/server.log tracks the active log without needing to know the date.

Start the Server

# Development mode
npm run dev
# Production mode
npm start

The server will be available at http://localhost:{port} using the port specified in the config. In the production servers listed above, the server always sits behind an NGINX server which manages SSL, security, rate limiting etc.

Testing

npm test

Deployment

There are three deployment options: npm global install, Docker, or clone-and-run. All three use the FHIRSMITH_DATA_DIR environment variable to locate the data directory.

npm Global Install

# Install globally
npm install -g fhirsmith
# Create a data directory
mkdir -p /var/lib/fhirsmith
cp node_modules/fhirsmith/config-template.json /var/lib/fhirsmith/config.json
# Edit config.json as needed# Set the data directory and runexport FHIRSMITH_DATA_DIR=/var/lib/fhirsmith
fhirsmith

Or run it inline:

FHIRSMITH_DATA_DIR=/var/lib/fhirsmith fhirsmith

Docker Installation

The server is available as a Docker image. Mount a host directory as the data directory:

# Pull the latest image
docker pull ghcr.io/healthintersections/fhirsmith:latest
# Create and populate data directory on host
mkdir -p /path/to/data
cp config-template.json /path/to/data/config.json
# Edit config.json as needed# Run with data directory mounted
docker run -d --name fhirsmith \
-p 3000:3000 \
-e FHIRSMITH_DATA_DIR=/app/data \
-v /path/to/data:/app/data \
ghcr.io/healthintersections/fhirsmith:latest

Available tags:

  • latest: Latest stable release
  • vX.Y.Z: Specific version (e.g., v1.0.0)
  • cibuild: Latest build from the main branch

Environment Variables

VariableDescriptionDefault
FHIRSMITH_DATA_DIRPath to the data directory./data
PORTServer port (overrides config)from config.json
NODE_ENVNode environmentproduction

Windows Installation

You can install as a windows service using windows-install.js. You might need to hack that.

Releases

This project follows Semantic Versioning and uses a CHANGELOG.md file to track changes.

What's in a Release

Each GitHub Release includes:

  • Release notes extracted from CHANGELOG.md
  • Source code archives (zip and tar.gz)
  • Docker images pushed to GitHub Container Registry:
    • ghcr.io/healthintersections/fhirsmith:latest
    • ghcr.io/healthintersections/fhirsmith:vX.Y.Z
    • ghcr.io/healthintersections/fhirsmith:X.Y.Z
  • npm package published to npmjs.org as fhirsmith(if you add this)

Creating a Release

GitHub Actions will automatically:

  • Run tests
  • Create a GitHub Release with notes from CHANGELOG.md
  • Build and publish Docker images with appropriate tags

Prerequisites:

  • All tests passing on main branch
  • CHANGELOG.md updated with changes

Steps:

  1. Update CHANGELOG.md with your changes under a new version section:
 ## [vX.Y.Z] - YYYY-MM-DD### Added- New feature description
### Changed- Change description
### Fixed- Bug fix description
### Tx Conformance Statement {copy content from text-cases-summary.txt}
  1. Update package.json & package-lock.json to have the same release version

  2. Commit your changes:

 git commit -m "Prepare release vX.Y.Z"
git push origin main:XXXXXX

or do it via a PR

  1. Tag and push the release:
 git tag vX.Y.Z
git push origin vX.Y.Z
  1. Monitor the release:

  2. Update package.json to have the next release version -SNAPSHOT

If a release fails:

  • Delete the tag: git tag -d vX.Y.Z && git push origin :refs/tags/vX.Y.Z
  • Fix the issue
  • Re-tag and push

Creating a Release

License

BSD-3

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Support

About

No description, website, or topics provided.

Resources

Security policy

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages