Automating Simplifier Sync

Firely Terminal is a .NET command line tool, so this works on any CI/CD platform that can install a .NET tool — GitHub Actions, Azure DevOps, GitLab CI, Jenkins, Bitbucket Pipelines and others. Every pipeline boils down to the same three steps: install the .NET SDK, run dotnet tool install --global Firely.Terminal, then run the fhir commands you need.

Store your Simplifier credentials as secrets or protected variables in your CI/CD platform. Never commit them to your repository.

Both examples below use --strategy TakeLocal, because in this scenario Git is the source of truth: whatever is in the repository wins.

GitHub Actions

Add the following as .github/workflows/sync-simplifier.yaml and configure SIMPLIFIER_USERNAME, SIMPLIFIER_PASSWORD and SIMPLIFIER_PROJECT_URLKEY as repository secrets. This example is triggered manually; uncomment the push trigger to run it on every commit to main or develop.

name: Simplifier Sync using Firely Terminal
on:
  workflow_dispatch: {}
  #push:
    #branches: [ main, develop ]

jobs:
  sync-simplifier:
    name: Sync to Simplifier
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '8.0.x'

      - name: Install Firely.Terminal
        run: |
          if ! command -v fhir &> /dev/null; then
            dotnet tool install --global Firely.Terminal > /dev/null
          fi

      - name: Check Firely Terminal Version
        run: fhir -v

      - name: Simplifier login and sync
        env:
          SIMPLIFIER_USERNAME: ${{ secrets.SIMPLIFIER_USERNAME }}
          SIMPLIFIER_PASSWORD: ${{ secrets.SIMPLIFIER_PASSWORD }}
          SIMPLIFIER_PROJECT_URLKEY: ${{ secrets.SIMPLIFIER_PROJECT_URLKEY }}
        run: |
          fhir login email=$SIMPLIFIER_USERNAME password=$SIMPLIFIER_PASSWORD
          fhir project link $SIMPLIFIER_PROJECT_URLKEY --strategy TakeLocal
          fhir project sync

Azure DevOps

The same flow as an Azure Pipelines definition. Define SIMPLIFIER_USERNAME, SIMPLIFIER_PASSWORD and SIMPLIFIER_PROJECTURLKEY as pipeline variables, and mark the password as secret.

trigger:
- main

pool:
  vmImage: ubuntu-latest

steps:
- task: UseDotNet@2
  inputs:
    version: '8.x'

- script: |
    if ! command -v fhir &> /dev/null; then
      dotnet tool install --global Firely.Terminal > /dev/null
    fi
  displayName: 'Install Firely.Terminal'

- script: fhir -v
  displayName: 'Check Firely Terminal Version'

- script: |
    fhir login email=$SIMPLIFIER_USERNAME password=$SIMPLIFIER_PASSWORD
    fhir project link $(SIMPLIFIER_PROJECTURLKEY) --strategy TakeLocal
    fhir project sync
  displayName: 'Simplifier login and sync'
  env:
    SIMPLIFIER_USERNAME: $(SIMPLIFIER_USERNAME)
    SIMPLIFIER_PASSWORD: $(SIMPLIFIER_PASSWORD)

Note

Both examples run fhir project link before every sync. A fresh CI checkout has no link to Simplifier yet, so the link has to be (re)established on every run.

To also validate your resources on every push, see Automating quality control.