70 Commits

Author SHA1 Message Date
4813f63da5 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m55s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2026-03-08 13:12:35 +06:00
04ef3b0b55 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m43s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-08 05:03:04 +06:00
25f0017595 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m5s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2026-03-08 04:48:06 +06:00
a5e39b94d3 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m43s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-08 00:08:16 +06:00
9968c28e5c #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m37s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-07 23:51:13 +06:00
7125b57aa2 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m34s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-07 23:31:52 +06:00
958eba6c44 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m42s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-07 22:44:54 +06:00
fcb5002641 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 10m21s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-07 22:20:07 +06:00
b7c824b34a #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m52s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 22:08:18 +06:00
e8cf5ab9be #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m59s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2026-03-07 21:54:05 +06:00
c35bc8e8a4 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 6m33s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 21:42:57 +06:00
c2e7119335 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 3m49s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 21:32:34 +06:00
c6903044aa #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 1m44s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 21:05:46 +06:00
aca893377c #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 3m22s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 20:56:36 +06:00
ccf6fef643 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 1m24s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 20:53:06 +06:00
c80f2f3a40 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 46s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 20:48:42 +06:00
804a7ff3d6 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 2m7s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 20:40:50 +06:00
db2f074cbe #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 3m52s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 20:22:12 +06:00
7731328402 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 10m54s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 20:02:55 +06:00
a5d41e88de #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 9m5s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 19:36:05 +06:00
5ca0ffdd86 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m14s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 19:28:52 +06:00
d82e428e24 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m8s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 18:57:46 +06:00
dc43651043 # 2026-03-07 18:45:16 +06:00
2fc782a082 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m46s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 18:30:22 +06:00
2db03cd2cc #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 9s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 18:29:27 +06:00
323abf04dc #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 5s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 18:28:13 +06:00
e3de38a794 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m47s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 18:04:46 +06:00
9ed33227d3 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m47s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 17:47:51 +06:00
8ddb62ab26 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m50s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 17:30:52 +06:00
c2be28e714 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m13s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 17:16:58 +06:00
dee47229d7 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m54s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 17:01:01 +06:00
a60c2c6c21 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m51s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 16:42:54 +06:00
b759890259 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m49s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 16:28:14 +06:00
c9cf4c5157 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m48s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 15:41:05 +06:00
45505bd4b8 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m47s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 15:20:14 +06:00
3e1f6979b5 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m44s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 13:57:53 +06:00
c39615ff85 #
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m55s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 13:49:26 +06:00
06d3a6ef13 #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m50s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 13:41:30 +06:00
8c8b8f032c #
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m53s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 13:32:02 +06:00
4d24e3f30c modified history template
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m38s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 05:40:28 +06:00
57aba6ddc6 modified history template and workflow
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m36s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 05:32:12 +06:00
665ba07e37 modified history template
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m41s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 05:20:59 +06:00
18f71a6a04 updated history template
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m40s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 8s
2026-03-07 04:58:21 +06:00
83ad838fc4 removed js from template
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m40s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2026-03-07 04:42:27 +06:00
63ca3fa44f updated template javascript
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m45s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 04:25:27 +06:00
fdca2f9c3b fixed template javascript
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4m42s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 04:08:55 +06:00
3b48bd79e2 updated template
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m30s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2026-03-07 03:49:23 +06:00
b620db17d5 updated workflow
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m35s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2026-03-07 03:30:16 +06:00
f2201f4da8 updated history template
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m36s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2026-03-07 03:09:35 +06:00
b3cf356b32 modified history template
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m49s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2026-03-07 02:53:09 +06:00
7cb360b1d2 added history template
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 5m38s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 02:40:13 +06:00
6beb9318fe fixed workflow
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 5m34s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 02:20:58 +06:00
423d1c271f modified workflow
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Has been cancelled
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been cancelled
2026-03-07 02:12:12 +06:00
53190dddd6 removed cleanup workflow
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 29s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 01:58:35 +06:00
5205c06bab modified cleanup workflow
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 28s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 01:46:27 +06:00
b89620b4ed Added cleanup workflow
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 29s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 01:40:48 +06:00
c195390fe7 fixed ci/cd workflow to save disk space
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 29s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 01:33:29 +06:00
e6cb213212 fixed ci workflow to save disk space
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 40s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 01:30:57 +06:00
0bce070ae2 fixed workflow to save disk space
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 29s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 01:28:06 +06:00
9bf4b2d457 modified workflow to save disk space
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 5s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 01:23:26 +06:00
68c748b06e Add debugging to workflow and bump to 0.2.5
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 29s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
2026-03-07 01:06:10 +06:00
2b2ec21c24 Add debugging to workflow and bump to 0.2.4
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 5m59s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-07 00:17:09 +06:00
80c870f8a0 Added ICD11 codesystem
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m7s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-07 00:00:54 +06:00
5da54fa665 Prepare for 0.2.2 release with complete version history extended
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m3s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-06 23:27:59 +06:00
39717d3c1d Prepare for 0.2.2 release with complete version history
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m14s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 10s
2026-03-06 23:10:01 +06:00
jobayer
777f2b3a0d chore: update version to 0.2.1
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 8m31s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 11s
2025-12-22 15:56:22 +06:00
jobayer
791dda3931 ci: enhance pipeline with pre-build package-list.json update
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
Move package-list.json update to occur before the build step for release builds,
allowing IG Publisher to generate history.html correctly. Adjust post-build steps
to only update package-feed.xml, and add verification for history.html generation
and deployment. This ensures registry files are prepared earlier in the process.
2025-12-22 15:41:41 +06:00
jobayer
205f3e58a1 -
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m33s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2025-12-22 15:28:57 +06:00
jobayer
c5e0a7d039 ci: enhance deployment with file cleanup and forced container recreation
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m25s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2025-12-22 13:38:59 +06:00
jobayer
3297b88035 ci: enhance pipeline with version persistence and direct deployment
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m58s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Failing after 8s
- Add version extraction from IG and tag validation for releases
- Update package-list.json and package-feed.xml automatically on releases
- Replace Docker-based deployment with direct file upload via SCP/SSH
- Add publication request configuration for FHIR registry
- Remove obsolete Dockerfile.serve as deployment strategy changed
2025-12-22 12:58:59 +06:00
10 changed files with 825 additions and 342 deletions

View File

@@ -1,283 +1,628 @@
name: FHIR IG CI/CD Pipeline name: FHIR IG CI/CD Pipeline with Version Persistence
on: on:
push: push:
branches: [ main, develop ] tags:
- 'v*.*.*'
pull_request: pull_request:
branches: [ main ] branches: [ main ]
env: env:
REGISTRY: git.dghs.gov.bd # Replace with your Gitea instance REGISTRY: git.dghs.gov.bd
IMAGE_NAME: gitadmin/bd-core-fhir-ig # Replace with your image name IMAGE_NAME: gitadmin/bd-core-fhir-ig
jobs: jobs:
build-ig: build-ig:
runs-on: ubuntu-latest runs-on: fhir-runner
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Full history for proper IG building
- name: Install Docker CLI
run: |
apt-get update
apt-get install -y docker.io
docker --version
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
with:
install: true
steps:
- name: Build FHIR IG (Copy In/Out) - name: Checkout repository
run: | uses: actions/checkout@v3
echo "Building FHIR IG using copy approach..." with:
fetch-depth: 0
# Create a container (don't start yet)
CONTAINER_ID=$(docker create \ - name: Extract version from IG
hl7fhir/ig-publisher-base:latest \ id: version
/bin/bash -c "cp -r /home/publisher/ig /tmp/build && cd /tmp/build && _updatePublisher.sh -y && _genonce.sh") run: |
VERSION=$(grep -oP '<version value="\K[^"]+' input/bd.fhir.core.xml | head -1)
echo "Container ID: $CONTAINER_ID"
if [ -z "$VERSION" ]; then
# Copy all source files into the container echo "ERROR: Could not extract version from ImplementationGuide XML"
docker cp $(pwd)/. $CONTAINER_ID:/home/publisher/ig/ exit 1
fi
# Start and wait for completion
docker start -a $CONTAINER_ID echo "Extracted version: $VERSION"
EXIT_CODE=$? echo "version=$VERSION" >> $GITHUB_OUTPUT
# Copy outputs back if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
echo "Copying outputs from container..." BUILD_TYPE="release"
docker cp $CONTAINER_ID:/tmp/build/output ./output || echo "Warning: No output directory" TAG_VERSION="${GITHUB_REF#refs/tags/v}"
docker cp $CONTAINER_ID:/tmp/build/fsh-generated ./fsh-generated || echo "No FSH generated files"
docker cp $CONTAINER_ID:/tmp/build/input-cache ./input-cache || echo "No input-cache" if [ "$TAG_VERSION" != "$VERSION" ]; then
docker cp $CONTAINER_ID:/tmp/build/temp ./temp || echo "No temp directory" echo "ERROR: Git tag version ($TAG_VERSION) doesn't match IG version ($VERSION)"
exit 1
# Show container logs if failed fi
if [ $EXIT_CODE -ne 0 ]; then else
echo "Build failed, showing container logs:" BUILD_TYPE="dev"
docker logs $CONTAINER_ID fi
fi
echo "build_type=$BUILD_TYPE" >> $GITHUB_OUTPUT
# Cleanup echo "Build type: $BUILD_TYPE"
docker rm $CONTAINER_ID
- name: Prepare package-list.json and history.xml for IG Publisher
# Verify run: |
if [ ! -f "output/index.html" ]; then VERSION="${{ steps.version.outputs.version }}"
echo "ERROR: Build failed - no index.html" BUILD_TYPE="${{ steps.version.outputs.build_type }}"
exit 1 DATE=$(date +%Y-%m-%d)
fi
export VERSION DATE BUILD_TYPE
echo "✅ Build successful!"
echo "📋 Preparing package-list.json and history.xml for IG Publisher..."
- name: Verify IG Output
run: | if [ ! -f "package-list.json" ]; then
ls -la output/ echo "⚠️ package-list.json not found in repo root"
if [ ! -f "output/index.html" ]; then echo "Creating initial package-list.json..."
echo "ERROR: IG build failed - no index.html found" cat > package-list.json << 'PKGEOF'
exit 1 {
fi "package-id": "bd.fhir.core",
echo "IG build successful!" "title": "Bangladesh Core FHIR Implementation Guide",
"canonical": "https://fhir.dghs.gov.bd/core",
- name: Login to Gitea Container Registry "introduction": "The Bangladesh Core FHIR IG defines national base profiles, value sets, and extensions for health data interoperability.",
if: github.ref == 'refs/heads/main' "list": [
uses: docker/login-action@v3 {
with: "version": "current",
registry: ${{ env.REGISTRY }} "desc": "Continuous Integration Build (latest in version control)",
username: ${{ gitea.actor }} "path": "https://fhir.dghs.gov.bd/core/",
password: ${{ secrets.ACCESS_TOKEN_GITEA }} "status": "ci-build",
"current": true
- name: Extract metadata }
if: github.ref == 'refs/heads/main' ]
id: meta }
uses: docker/metadata-action@v4 PKGEOF
with: fi
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: | python3 << 'PYEOF'
type=ref,event=branch import json
type=ref,event=pr import os
type=sha,prefix={{branch}}- import sys
type=raw,value=latest,enable={{is_default_branch}}
version = os.environ.get('VERSION', '')
- name: Build and push Docker image date = os.environ.get('DATE', '')
if: github.ref == 'refs/heads/main' build_type = os.environ.get('BUILD_TYPE', '')
uses: docker/build-push-action@v6
with: with open('package-list.json', 'r', encoding='utf-8') as f:
context: . pkg_list = json.load(f)
file: ./Dockerfile.serve
push: true if 'list' not in pkg_list or not isinstance(pkg_list['list'], list):
tags: ${{ steps.meta.outputs.tags }} print("ERROR: package-list.json does not contain a valid 'list' array")
labels: ${{ steps.meta.outputs.labels }} sys.exit(1)
# cache-from: type=gha
# cache-to: type=gha,mode=max current_entries = [e for e in pkg_list['list'] if e.get('version') == 'current']
if not current_entries:
pkg_list['list'].insert(0, {
"version": "current",
"desc": "Continuous Integration Build (latest in version control)",
"path": "https://fhir.dghs.gov.bd/core/",
"status": "ci-build",
"current": True
})
if build_type == 'release':
version_entry = None
for e in pkg_list['list']:
if e.get('version') == version:
version_entry = e
break
if version_entry is None:
new_entry = {
"version": version,
"date": date,
"desc": f"Release {version}",
"path": f"https://fhir.dghs.gov.bd/core/{version}/",
"status": "trial-use",
"sequence": "STU 1"
}
insert_index = 1
for i, entry in enumerate(pkg_list['list']):
if entry.get('version') == 'current':
insert_index = i + 1
break
pkg_list['list'].insert(insert_index, new_entry)
print(f"✅ Added version {version} to package-list.json")
else:
print(f" Version {version} already exists in package-list.json")
else:
print(" Dev build - using existing package-list.json without release modification")
with open('package-list.json', 'w', encoding='utf-8') as f:
json.dump(pkg_list, f, indent=2, ensure_ascii=False)
PYEOF
echo "🔍 Validating package-list.json..."
python3 -m json.tool package-list.json > /dev/null && echo "✅ Valid JSON" || (echo "❌ Invalid JSON!" && exit 1)
echo "📂 Ensuring package-list.json is in required locations..."
mkdir -p input
cp package-list.json input/package-list.json
echo "📝 Generating static history.xml from package-list.json..."
mkdir -p input/pagecontent
python3 << 'PYEOF'
import json
import os
from html import escape
os.makedirs('input/pagecontent', exist_ok=True)
with open('package-list.json', 'r', encoding='utf-8') as f:
pkg_list = json.load(f)
xml = '''<?xml version="1.0" encoding="UTF-8"?>
<div xmlns="http://www.w3.org/1999/xhtml">
<p>This page provides the version history for the Bangladesh Core FHIR Implementation Guide.</p>
<p>For a machine-readable version history see <a href="package-list.json">package-list.json</a>.</p>
<p><b>Published Versions</b></p>
<table class="grid table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Version</th>
<th>Date</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
'''
def version_key(v):
try:
return tuple(int(x) for x in v.split('.'))
except:
return (0,)
published = [
e for e in pkg_list['list']
if e.get('version') and e.get('version') != "current"
]
# Sort newest version first
published.sort(
key=lambda e: version_key(e.get("version", "0.0.0")),
reverse=True
)
published_found = False
first_row = True
for entry in published:
published_found = True
version = escape(entry.get('version', 'Unknown'))
date = escape(entry.get('date', 'N/A'))
desc = escape(entry.get('desc', ''))
path = escape(entry.get('path', '#'))
status_val = entry.get('status', 'unknown')
if status_val == "trial-use":
status = '<span class="badge bg-info">Trial Use</span>'
elif status_val == "normative":
status = '<span class="badge bg-success">Normative</span>'
else:
status = f'<span class="badge bg-secondary">{escape(status_val)}</span>'
badge = '<span class="badge bg-success">Latest</span> ' if first_row else ''
xml += f'''
<tr>
<td><a href="{path}">{badge}{version}</a></td>
<td>{date}</td>
<td>{status}</td>
<td>{desc}</td>
</tr>
'''
first_row = False
if not published_found:
xml += '''
<tr>
<td colspan="4">No published versions available yet.</td>
</tr>
'''
xml += '''
</tbody>
</table>
<p class="lead"><b>Continuous Integration Build</b></p>
'''
current_entry = None
for entry in pkg_list['list']:
if entry.get('version') == 'current':
current_entry = entry
break
if current_entry:
path = escape(current_entry.get('path', pkg_list.get('canonical', '') + '/'))
xml += f'''
<p>The latest development build is available at:
<a href="{path}">{path}</a></p>
'''
else:
xml += '''
<p><i>No CI build entry found in package-list.json.</i></p>
'''
xml += '''
</div>
'''
with open('input/pagecontent/history.xml', 'w', encoding='utf-8') as f:
f.write(xml)
print("✅ Generated static history.xml")
print(f" File location: {os.path.abspath('input/pagecontent/history.xml')}")
print(f" File size: {os.path.getsize('input/pagecontent/history.xml')} bytes")
PYEOF
if [ -f "input/pagecontent/history.xml" ]; then
echo "✅ Verified: history.xml exists"
echo " First 20 lines:"
head -20 input/pagecontent/history.xml
else
echo "❌ ERROR: history.xml was not created!"
exit 1
fi
echo "✅ Pre-build preparation complete:"
echo " - Root: $(pwd)/package-list.json"
echo " - Input: $(pwd)/input/package-list.json"
echo " - History: $(pwd)/input/pagecontent/history.xml"
echo "==============================="
echo "PACKAGE LIST USED FOR BUILD:"
cat package-list.json
echo "-------------------------------"
echo "INPUT COPY:"
cat input/package-list.json
echo "==============================="
- name: Emergency Disk Cleanup
run: |
echo "Disk usage before:"
df -h
echo "Clearing tool cache..."
rm -rf /opt/hostedtoolcache/* || true
rm -rf /usr/share/dotnet || true
rm -rf /usr/local/lib/android || true
rm -rf /opt/ghc || true
rm -rf ~/.fhir/packages || true
echo "Disk usage after:"
df -h
- name: Install Docker CLI
run: |
apt-get update
apt-get install -y docker.io
docker --version
- name: Preload previous IG package for comparison
run: |
echo "Detecting previous version..."
PREV_VERSION=$(python3 <<'PY'
import json
with open("package-list.json") as f:
data = json.load(f)
versions = [v["version"] for v in data["list"] if v["version"] != "current"]
print(versions[0] if versions else "")
PY
)
if [ -z "$PREV_VERSION" ]; then
echo "No previous version found. Skipping preload."
exit 0
fi
echo "Previous version detected: $PREV_VERSION"
mkdir -p previous-packages
TMPDIR=$(mktemp -d)
URL="https://fhir.dghs.gov.bd/core/$PREV_VERSION/package.tgz"
echo "Downloading $URL"
curl -L "$URL" -o "$TMPDIR/package.tgz"
mkdir -p "previous-packages/bd.fhir.core#$PREV_VERSION"
tar -xzf "$TMPDIR/package.tgz" -C "previous-packages/bd.fhir.core#$PREV_VERSION"
echo "Previous package cached:"
ls previous-packages
- name: Build FHIR IG
run: |
echo "Building FHIR IG version ${{ steps.version.outputs.version }}..."
CONTAINER_ID=$(docker create \
-v $(pwd)/previous-packages:/previous-packages \
hl7fhir/ig-publisher-base:latest \
/bin/bash -c "
mkdir -p /tmp/build
cp -r /home/publisher/ig /tmp/build/ig
cd /tmp/build/ig
rm -f package-list.json
_updatePublisher.sh -y
_genonce.sh
")
echo "Container ID: $CONTAINER_ID"
docker cp "$(pwd)/." "$CONTAINER_ID:/home/publisher/ig/"
echo "Mounted FHIR packages:"
ls -R previous-packages || echo "No previous packages directory"
docker start -a "$CONTAINER_ID"
EXIT_CODE=$?
echo "Copying outputs from container..."
docker cp "$CONTAINER_ID:/tmp/build/ig/output" ./output || echo "Warning: No output directory"
docker cp "$CONTAINER_ID:/tmp/build/ig/fsh-generated" ./fsh-generated || echo "No FSH generated"
docker cp "$CONTAINER_ID:/tmp/build/ig/input-cache" ./input-cache || echo "No input-cache"
docker cp "$CONTAINER_ID:/tmp/build/ig/temp" ./temp || echo "No temp directory"
if [ $EXIT_CODE -ne 0 ]; then
echo "Build failed, showing logs:"
docker logs "$CONTAINER_ID"
docker rm "$CONTAINER_ID"
exit 1
fi
docker rm "$CONTAINER_ID"
if [ ! -f "output/index.html" ]; then
echo "ERROR: Build failed - no index.html"
exit 1
fi
echo ""
echo "🔍 Checking for history.html..."
if [ -f "output/history.html" ]; then
echo "✅ history.html generated successfully!"
echo "📄 history.html size: $(ls -lh output/history.html | awk '{print $5}')"
else
echo "⚠️ WARNING: history.html was NOT generated"
echo "This might indicate an issue with the template or history.xml/package-list.json"
fi
echo "================================"
echo "IG Publisher comparison log:"
cat output/qa.compare.txt || echo "qa.compare.txt not found"
echo "================================"
echo "✅ Build successful!"
- name: Update package-feed.xml for releases
if: steps.version.outputs.build_type == 'release'
run: |
VERSION="${{ steps.version.outputs.version }}"
DATETIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
cat > update-feed.py << 'EOF'
import sys
import xml.etree.ElementTree as ET
version = sys.argv[1]
datetime_iso = sys.argv[2]
ET.register_namespace('', 'http://www.w3.org/2005/Atom')
tree = ET.parse('package-feed.xml')
root = tree.getroot()
ns = {'atom': 'http://www.w3.org/2005/Atom'}
updated_elem = root.find('atom:updated', ns)
if updated_elem is not None:
updated_elem.text = datetime_iso
entry_exists = False
for entry in root.findall('atom:entry', ns):
title = entry.find('atom:title', ns)
if title is not None and version in (title.text or ''):
entry_exists = True
entry_updated = entry.find('atom:updated', ns)
if entry_updated is not None:
entry_updated.text = datetime_iso
break
if not entry_exists:
new_entry = ET.Element('{http://www.w3.org/2005/Atom}entry')
title = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}title')
title.text = f"bd.fhir.core version {version}"
link = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}link')
link.set('rel', 'alternate')
link.set('href', f"https://fhir.dghs.gov.bd/core/{version}/")
entry_id = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}id')
entry_id.text = f"https://fhir.dghs.gov.bd/core/{version}/"
entry_updated = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}updated')
entry_updated.text = datetime_iso
summary = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}summary')
summary.text = f"Release {version} of Bangladesh Core FHIR Implementation Guide"
insert_pos = 0
for i, child in enumerate(root):
if child.tag.endswith('entry'):
insert_pos = i
break
insert_pos = i + 1
root.insert(insert_pos, new_entry)
tree.write('output/package-feed.xml', encoding='utf-8', xml_declaration=True)
print("✅ Updated package-feed.xml")
EOF
python3 update-feed.py "$VERSION" "$DATETIME"
cp package-list.json output/package-list.json
echo "📋 Updated registry files"
- name: Prepare deployment artifact
run: |
VERSION="${{ steps.version.outputs.version }}"
BUILD_TYPE="${{ steps.version.outputs.build_type }}"
tar -czf ig-output.tar.gz -C output .
echo "version=$VERSION" > deployment.env
echo "build_type=$BUILD_TYPE" >> deployment.env
echo "build_date=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> deployment.env
echo "📦 Output contents:"
ls -lh output/ | grep -E "(history\.html|package-list\.json|package-feed\.xml|index\.html)" || echo "Some files may be missing"
ls -lh ig-output.tar.gz
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ig-output
path: |
ig-output.tar.gz
deployment.env
package-list.json
package-feed.xml
retention-days: 30
deploy: deploy:
needs: build-ig needs: build-ig
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Deploy to server
uses: appleboy/ssh-action@v1.0.3
env:
REGISTRY: ${{ env.REGISTRY }}
IMAGE_NAME: ${{ env.IMAGE_NAME }}
IMAGE_TAG: latest
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
password: ${{ secrets.DEPLOY_PASSWORD }}
port: ${{ secrets.DEPLOY_PORT || 22 }}
envs: REGISTRY,IMAGE_NAME,IMAGE_TAG
script: |
# Create deployment directory if it doesn't exist
mkdir -p /opt/fhir-ig
cd /opt/fhir-ig
# Create docker-compose.prod.yml
cat > docker-compose.prod.yml << EOF
services:
fhir-ig:
image: \${REGISTRY}/\${IMAGE_NAME}:\${IMAGE_TAG:-latest}
container_name: fhir-ig-app
restart: unless-stopped
ports:
- "80:80"
environment:
- NODE_ENV=production
networks:
- fhir-ig-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
- fhir-ig-logs:/var/log/nginx
networks:
fhir-ig-network:
driver: bridge
volumes:
fhir-ig-logs:
driver: local
EOF
# Create deployment script
cat > deploy.sh << 'DEPLOY_SCRIPT'
#!/bin/bash
set -e
# Configuration
COMPOSE_FILE="docker-compose.prod.yml"
SERVICE_NAME="fhir-ig"
BACKUP_DIR="/opt/backups/fhir-ig"
LOG_FILE="/var/log/fhir-ig-deploy.log"
# Create directories
mkdir -p "$BACKUP_DIR"
mkdir -p "$(dirname "$LOG_FILE")"
# Logging function
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
log "Starting deployment of BD Core FHIR IG..."
log "Registry: $REGISTRY"
log "Image: $IMAGE_NAME"
log "Tag: $IMAGE_TAG"
# Login to registry
echo "$GITEA_PASSWORD" | docker login $REGISTRY -u "$GITEA_USERNAME" --password-stdin
# Backup current container if it exists
if docker compose -f "$COMPOSE_FILE" ps --services --filter "status=running" | grep -q "$SERVICE_NAME"; then
log "Creating backup of current deployment..."
BACKUP_FILE="$BACKUP_DIR/backup-$(date +%Y%m%d-%H%M%S).tar.gz"
docker compose -f "$COMPOSE_FILE" exec -T "$SERVICE_NAME" tar -czf - -C /usr/share/nginx/html . > "$BACKUP_FILE" 2>/dev/null || log "Backup failed, continuing..."
fi
# Set environment variables for docker compose
export REGISTRY="$REGISTRY"
export IMAGE_NAME="$IMAGE_NAME"
export IMAGE_TAG="$IMAGE_TAG"
# Pull the latest image
log "Pulling latest image: $REGISTRY/$IMAGE_NAME:$IMAGE_TAG..."
docker pull "$REGISTRY/$IMAGE_NAME:$IMAGE_TAG"
# docker pull "\${REGISTRY}/\${IMAGE_NAME}:\${IMAGE_TAG}" steps:
- name: Download artifact
# Stop and remove old container uses: actions/download-artifact@v3
log "Stopping old container..." with:
docker compose -f "$COMPOSE_FILE" down || log "No existing container to stop" name: ig-output
# Start new container - name: Load deployment env
log "Starting new container..." id: deploy_info
docker compose -f "$COMPOSE_FILE" up -d run: |
source deployment.env
# Wait for container to be healthy echo "version=$version" >> $GITHUB_OUTPUT
# log "Waiting for container to become healthy..." echo "build_type=$build_type" >> $GITHUB_OUTPUT
# timeout=120 echo "build_date=$build_date" >> $GITHUB_OUTPUT
# elapsed=0
# healthy=false echo "Deploying version: $version"
echo "Build type: $build_type"
# while [ $elapsed -lt $timeout ]; do
# if docker compose -f "$COMPOSE_FILE" ps --format json | grep -q '"Health":"healthy"'; then - name: Deploy to server
# log "Container is healthy!" uses: appleboy/scp-action@v0.1.7
# healthy=true with:
# break host: ${{ secrets.DEPLOY_HOST }}
# fi username: ${{ secrets.DEPLOY_USER }}
# sleep 5 password: ${{ secrets.DEPLOY_PASSWORD }}
# elapsed=$((elapsed + 5)) port: ${{ secrets.DEPLOY_PORT || 22 }}
# log "Waiting... ($elapsed/$timeout seconds)" source: "ig-output.tar.gz,deployment.env,package-list.json,package-feed.xml"
# done target: "/tmp/fhir-ig-deploy/"
# if [ "$healthy" = false ]; then - name: Execute deployment on server
# log "ERROR: Container failed to become healthy within $timeout seconds" uses: appleboy/ssh-action@v1.0.3
# docker compose -f "$COMPOSE_FILE" logs --tail=50 with:
# log "Rolling back..." host: ${{ secrets.DEPLOY_HOST }}
# docker compose -f "$COMPOSE_FILE" down username: ${{ secrets.DEPLOY_USER }}
# exit 1 password: ${{ secrets.DEPLOY_PASSWORD }}
# fi port: ${{ secrets.DEPLOY_PORT || 22 }}
script: |
# Cleanup old images (keep last 3 versions) set -e
log "Cleaning up old images..."
docker images "\${REGISTRY}/\${IMAGE_NAME}" --format "table {{.Repository}}:{{.Tag}}\t{{.CreatedAt}}" | tail -n +2 | sort -k2 -r | tail -n +4 | awk '{print $1}' | xargs -r docker rmi || log "No old images to clean" source /tmp/fhir-ig-deploy/deployment.env
# Cleanup old backups (keep only last 5) echo "=========================================="
log "Cleaning up old backups..." echo "Deploying FHIR IG"
ls -t "$BACKUP_DIR"/backup-*.tar.gz 2>/dev/null | tail -n +6 | xargs -r rm || log "No old backups to clean" echo "Version: $version"
echo "Build Type: $build_type"
log "Deployment completed successfully!" echo "Build Date: $build_date"
log "🌐 Service available at: http://$(hostname -I | awk '{print $1}')" echo "=========================================="
# Display final status VERSIONS_DIR="/opt/fhir-ig/versions"
docker compose -f "$COMPOSE_FILE" ps mkdir -p "$VERSIONS_DIR"
DEPLOY_SCRIPT
if [ "$build_type" = "release" ]; then
# Make deploy script executable TARGET_DIR="$VERSIONS_DIR/$version"
chmod +x deploy.sh echo "📦 Deploying release version to: $TARGET_DIR"
else
# Set registry credentials TARGET_DIR="$VERSIONS_DIR/dev"
export GITEA_USERNAME="${{ gitea.actor }}" echo "🔧 Deploying dev build to: $TARGET_DIR"
export GITEA_PASSWORD="${{ secrets.ACCESS_TOKEN_GITEA }}" mkdir -p "$TARGET_DIR"
echo "Cleaning old dev files..."
# Execute deployment rm -rf "$TARGET_DIR"/*
./deploy.sh fi
mkdir -p "$TARGET_DIR"
echo "Extracting IG output..."
tar -xzf /tmp/fhir-ig-deploy/ig-output.tar.gz -C "$TARGET_DIR"
if [ -f "$TARGET_DIR/history.html" ]; then
echo "✅ history.html deployed successfully"
else
echo "⚠️ WARNING: history.html not found in deployment"
fi
cp "$TARGET_DIR/package-list.json" "$VERSIONS_DIR/package-list.json"
cp "$TARGET_DIR/package-feed.xml" "$VERSIONS_DIR/package-feed.xml"
cp "$TARGET_DIR/package-list.json" "/opt/fhir-ig/package-list.json"
cp "$TARGET_DIR/package-feed.xml" "/opt/fhir-ig/package-feed.xml"
if [ "$build_type" = "release" ]; then
echo "Updating 'current' symlink to point to $version"
rm -f "$VERSIONS_DIR/current"
ln -sf "$version" "$VERSIONS_DIR/current"
fi
cd /opt/fhir-ig
if [ ! -f "docker-compose.prod.yml" ]; then
echo "ERROR: docker-compose.prod.yml not found!"
echo "Please deploy the updated docker-compose.prod.yml and nginx.conf first"
exit 1
fi
docker compose -f docker-compose.prod.yml up -d --force-recreate fhir-ig
rm -rf /tmp/fhir-ig-deploy
echo "=========================================="
echo "✅ Deployment completed successfully!"
echo "Version $version is now available at:"
if [ "$build_type" = "release" ]; then
echo " - https://fhir.dghs.gov.bd/core/$version/"
echo " - https://fhir.dghs.gov.bd/core/$version/history.html"
echo " - https://fhir.dghs.gov.bd/core/ (current)"
else
echo " - https://fhir.dghs.gov.bd/core/dev/"
fi
echo "=========================================="
echo "Available versions:"
ls -lh "$VERSIONS_DIR" | grep -v total

View File

@@ -1,42 +0,0 @@
# Multi-stage build for serving FHIR IG output
FROM nginx:alpine
# Copy the built IG output to nginx html directory
# (Uncomment and adjust the path if needed)
COPY output/ /usr/share/nginx/html/
# Copy custom nginx configuration
COPY nginx.conf /etc/nginx/nginx.conf
# Create a non-root user for security
RUN addgroup -g 1001 -S nginx-user && \
adduser -S -D -H -u 1001 -h /var/cache/nginx -s /sbin/nologin -G nginx-user -g nginx-user nginx-user
# Set proper permissions for Nginx directories
RUN chown -R nginx-user:nginx-user /usr/share/nginx/html && \
chown -R nginx-user:nginx-user /var/cache/nginx && \
chown -R nginx-user:nginx-user /var/log/nginx && \
chown -R nginx-user:nginx-user /etc/nginx/conf.d
# Fix Nginx PID permission issue
RUN mkdir -p /var/cache/nginx/run && \
chown -R nginx-user:nginx-user /var/cache/nginx/run
# Update nginx.conf to point PID to writable location
# Ensure your nginx.conf has:
# pid /var/cache/nginx/run/nginx.pid;
# Switch to non-root user
USER nginx-user
# Health check
# HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
# CMD curl -f http://localhost/ || exit 1
EXPOSE 80
# Start Nginx in foreground
# CMD ["nginx", "-g", "daemon off;"]
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

1
ig.ini
View File

@@ -6,6 +6,7 @@ ig = input/bd.fhir.core.xml
template = #bd-national-template template = #bd-national-template
#template = D:\Git\templates\ig-template-base #template = D:\Git\templates\ig-template-base
#template = #local-template #template = #local-template
historypage = true
########################## ##########################
### ig.ini parameters: ### ### ig.ini parameters: ###

View File

@@ -13,7 +13,7 @@
</extension>--> </extension>-->
<url value="https://fhir.dghs.gov.bd/core/ImplementationGuide/bd.fhir.core"/> <url value="https://fhir.dghs.gov.bd/core/ImplementationGuide/bd.fhir.core"/>
<!-- This version will propagate to all artifacts unless the "propagate-version" extension is overridden --> <!-- This version will propagate to all artifacts unless the "propagate-version" extension is overridden -->
<version value="0.2.0"/> <version value="0.2.5"/>
<name value="BangladeshCoreFHIRIG"/> <name value="BangladeshCoreFHIRIG"/>
<title value="Bangladesh Core FHIR Implementation Guide"/> <title value="Bangladesh Core FHIR Implementation Guide"/>
<status value="active"/> <status value="active"/>
@@ -102,6 +102,11 @@
<title value="IG Change History"/> <title value="IG Change History"/>
<generation value="html"/> <generation value="html"/>
</page> </page>
<page>
<nameUrl value="history.html"/>
<title value="Version History"/>
<generation value="html"/>
</page>
</page> </page>
<!-- copyright year is a mandatory parameter --> <!-- copyright year is a mandatory parameter -->
<parameter> <parameter>
@@ -111,7 +116,7 @@
<!-- releaselabel should be the ballot status for HL7-published IGs. --> <!-- releaselabel should be the ballot status for HL7-published IGs. -->
<parameter> <parameter>
<code value="releaselabel"/> <code value="releaselabel"/>
<value value="Published by MoHFW"/> <value value="Published by DGHS, MoHFW"/>
</parameter> </parameter>
<parameter> <parameter>
<code value="find-other-resources"/> <code value="find-other-resources"/>

View File

@@ -0,0 +1,47 @@
// ============================================================
// CodeSystem-icd11-mms.fsh
// ICD-11 Mortality and Morbidity Statistics (MMS) — stub only
// Content is hosted externally; canonical authority is WHO.
// Runtime resolution via OCL: https://tr.ocl.dghs.gov.bd
// ============================================================
CodeSystem: ICD11MMSCS
Id: icd11-mms
Title: "ICD-11 Mortality and Morbidity Statistics (MMS)"
Description: """
WHO ICD-11 Mortality and Morbidity Statistics linearization.
Canonical system URI: http://id.who.int/icd/release/11/mms
This CodeSystem is declared as a stub (content = #not-present).
The authoritative content is maintained by the World Health Organization.
In Bangladesh, runtime code validation and lookup are delegated to the
national OCL terminology server at https://tr.ocl.dghs.gov.bd.
Supported operations (use `system=` parameter, not `url=`):
- $validate-code: https://tr.ocl.dghs.gov.bd/api/fhir/CodeSystem/$validate-code?system=http://id.who.int/icd/release/11/mms&code={code}
- $lookup: https://tr.ocl.dghs.gov.bd/api/fhir/CodeSystem/$lookup?system=http://id.who.int/icd/release/11/mms&code={code}
$expand is not supported — known OCL limitation. Expansion must not be
attempted at build time or by IG Publisher.
Preferred code form: short stem codes (e.g. 1A00, NC72.Z).
Linearization URIs are not used as code identifiers in this IG.
Version 2025-01 is imported into OCL with 36,941 concepts across
the following concept classes: Diagnosis, Finding, Substance, Organism,
Device, Anatomy, Misc.
"""
* ^url = "http://id.who.int/icd/release/11/mms"
* ^version = "2025-01"
* ^status = #active
* ^experimental = false
* ^publisher = "World Health Organization (WHO)"
* ^contact.name = "Directorate General of Health Services (DGHS), MoHFW, Bangladesh"
* ^contact.telecom.system = #url
* ^contact.telecom.value = "https://dghs.gov.bd"
* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh"
* ^copyright = "ICD-11 is copyright © World Health Organization. Used under licence."
* ^content = #not-present
* ^count = 36941
* ^caseSensitive = true

55
input/package-list.json Normal file
View File

@@ -0,0 +1,55 @@
{
"package-id": "bd.fhir.core",
"title": "Bangladesh Core FHIR Implementation Guide",
"canonical": "https://fhir.dghs.gov.bd/core",
"introduction": "The Bangladesh Core FHIR IG defines national base profiles, value sets, and extensions for health data interoperability.",
"list": [
{
"version": "current",
"desc": "Continuous Integration Build (latest in development)",
"path": "https://fhir.dghs.gov.bd/core/",
"status": "ci-build",
"current": true
},
{
"version": "0.2.4",
"date": "2025-10-06",
"desc": "Second draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.4/",
"status": "trial-use",
"sequence": "STU 1"
},
{
"version": "0.2.3",
"date": "2025-10-06",
"desc": "Second draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.3/",
"status": "trial-use",
"sequence": "STU 1"
},
{
"version": "0.2.2",
"date": "2025-10-06",
"desc": "Second draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.2/",
"status": "trial-use",
"sequence": "STU 1"
},
{
"version": "0.2.1",
"date": "2025-10-06",
"desc": "Second draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.1/",
"status": "trial-use",
"sequence": "STU 1"
},
{
"version": "0.2.0",
"date": "2025-10-02",
"desc": "First draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.0/",
"status": "trial-use",
"sequence": "STU 1"
}
]
}

View File

@@ -0,0 +1,14 @@
{
"package-id": "bd.fhir.core",
"version": "0.2.0",
"path": "https://fhir.dghs.gov.bd/core/0.2.0",
"mode": "working",
"status": "trial-use",
"sequence": "STU1",
"desc": "First draft release of the Bangladesh Core FHIR Implementation Guide",
"descmd": "# Bangladesh Core FHIR IG - Release 0.2.0\n\nThis is the first draft release of the Bangladesh Core FHIR Implementation Guide. It defines national base profiles, value sets, and extensions for health data interoperability in Bangladesh.\n\n## Key Features\n- Base profiles for common FHIR resources\n- National value sets and code systems\n- Extensions for Bangladesh-specific requirements\n\n## Status\nThis is a trial-use release. Implementers are encouraged to provide feedback.",
"first": true,
"category": "National Base",
"ci-build": "https://fhir.dghs.gov.bd/core/",
"package-list": "https://fhir.dghs.gov.bd/core/package-list.json"
}

View File

@@ -1,30 +1,33 @@
<rss xmlns:atom="http://www.w3.org/2005/Atom" <?xml version="1.0" encoding="UTF-8"?>
xmlns:content="http://purl.org/rss/1.0/modules/content/" <feed xmlns="http://www.w3.org/2005/Atom">
xmlns:dc="http://purl.org/dc/elements/1.1/" <id>https://fhir.dghs.gov.bd/core/package-feed.xml</id>
xmlns:fhir="http://hl7.org/fhir/feed" version="2.0"> <title>Bangladesh Core FHIR IG Package Feed</title>
<channel> <subtitle>FHIR Package Feed for bd.fhir.core</subtitle>
<title>Bangladesh Core FHIR Packages</title> <link rel="self" href="https://fhir.dghs.gov.bd/core/package-feed.xml"/>
<description>New Packages published by DGHS Bangladesh</description> <link rel="alternate" href="https://fhir.dghs.gov.bd/core/"/>
<link>https://git.dghs.gov.bd/gitadmin/BD-Core-FHIR-IG</link> <updated>2025-10-02T00:00:00Z</updated>
<generator>DGHS Bangladesh FHIR Publication tooling</generator> <author>
<lastBuildDate>Thu, 02 Oct 2025 12:00:00 +0000</lastBuildDate> <name>MIS, Directorate General of Health Services (DGHS), Bangladesh</name>
<atom:link href="https://git.dghs.gov.bd/gitadmin/BD-Core-FHIR-IG/src/branch/main/package-feed.xml" <uri>https://dghs.gov.bd</uri>
rel="self" type="application/rss+xml"/> </author>
<pubDate>Thu, 02 Oct 2025 12:00:00 +0000</pubDate>
<language>en</language> <!-- Entries will be automatically added by the CI/CD pipeline -->
<ttl>600</ttl> <!-- Example entry structure (will be generated): -->
<!--
<item> <entry>
<title>bd.fhir.core#0.2.0</title> <title>bd.fhir.core version 0.2.0</title>
<description>The first draft release of the Bangladesh Core FHIR Implementation Guide.</description> <link rel="alternate" href="https://fhir.dghs.gov.bd/core/0.2.0/"/>
<link>https://git.dghs.gov.bd/gitadmin/BD-Core-FHIR-IG/releases/download/v0.2.0/bd.fhir.core-0.2.0.tgz</link> <id>https://fhir.dghs.gov.bd/core/0.2.0/</id>
<guid isPermaLink="true">https://git.dghs.gov.bd/gitadmin/BD-Core-FHIR-IG/releases/download/v0.2.0/bd.fhir.core-0.2.0.tgz</guid> <updated>2025-10-02T00:00:00Z</updated>
<dc:creator>DGHS Bangladesh</dc:creator> <summary>Release 0.2.0 of Bangladesh Core FHIR Implementation Guide</summary>
<fhir:version>4.0.1</fhir:version> </entry>
<fhir:kind>IG</fhir:kind> -->
<pubDate>Thu, 02 Oct 2025 12:00:00 +0000</pubDate>
<fhir:details>Publication run at 02/10/2025 by DGHS Bangladesh using IG Publisher. Source: BD-Core-FHIR-IG repo</fhir:details> <entry>
</item> <title>bd.fhir.core version 0.2.0</title>
<link rel="alternate" href="https://fhir.dghs.gov.bd/core/0.2.0/"/>
</channel> <id>https://fhir.dghs.gov.bd/core/0.2.0/</id>
</rss> <updated>2025-10-02T00:00:00Z</updated>
<summary>First draft release of Bangladesh Core FHIR Implementation Guide</summary>
</entry>
</feed>

55
package-list.json Normal file
View File

@@ -0,0 +1,55 @@
{
"package-id": "bd.fhir.core",
"title": "Bangladesh Core FHIR Implementation Guide",
"canonical": "https://fhir.dghs.gov.bd/core",
"introduction": "The Bangladesh Core FHIR IG defines national base profiles, value sets, and extensions for health data interoperability.",
"list": [
{
"version": "current",
"desc": "Continuous Integration Build (latest in development)",
"path": "https://fhir.dghs.gov.bd/core/",
"status": "ci-build",
"current": true
},
{
"version": "0.2.4",
"date": "2025-10-06",
"desc": "Second draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.4/",
"status": "trial-use",
"sequence": "STU 1"
},
{
"version": "0.2.3",
"date": "2025-10-06",
"desc": "Second draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.3/",
"status": "trial-use",
"sequence": "STU 1"
},
{
"version": "0.2.2",
"date": "2025-10-06",
"desc": "Second draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.2/",
"status": "trial-use",
"sequence": "STU 1"
},
{
"version": "0.2.1",
"date": "2025-10-06",
"desc": "Second draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.1/",
"status": "trial-use",
"sequence": "STU 1"
},
{
"version": "0.2.0",
"date": "2025-10-02",
"desc": "First draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.0/",
"status": "trial-use",
"sequence": "STU 1"
}
]
}

View File

@@ -6,7 +6,7 @@ description: >
This Implementation Guide defines the Bangladesh Core FHIR profiles, This Implementation Guide defines the Bangladesh Core FHIR profiles,
value sets, code systems, and implementation rules for national digital health systems. value sets, code systems, and implementation rules for national digital health systems.
status: draft status: draft
version: 0.2.0 version: 0.2.5
fhirVersion: 4.0.1 fhirVersion: 4.0.1
copyrightYear: 2025+ copyrightYear: 2025+
releaseLabel: CI Build releaseLabel: CI Build