Back to blog
Apr 1, 2026Guide· 6 min read

From GitHub Actions to OSOP: Convert Your Existing Workflows

By OSOP Team

You do not need to start from scratch. OSOP's format converter (osop-interop) imports existing workflows from 6 popular formats — and exports back to 4 of them. This guide shows you how to convert your GitHub Actions, Airflow DAGs, and BPMN processes into OSOP.

Installation

install.sh
pip install osop-interop

Supported Formats

FormatImportExport
GitHub ActionsYesYes
BPMNYesYes
Apache AirflowYesYes
TemporalYesYes
Postman CollectionsYes
OpenAPI 3.xYes

Example: GitHub Actions to OSOP

Suppose you have a CI/CD workflow in .github/workflows/deploy.yml:

.github/workflows/deploy.yml
# .github/workflows/deploy.yml
name: Deploy
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm test
  build:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - run: npm run build
  deploy:
    needs: build
    environment: production
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh

Convert it to OSOP:

terminal
$ osop import .github/workflows/deploy.yml --from github-actions -o deploy.osop.yaml

The result:

deploy.osop.yaml
Testcicd
sequentialBuild
Buildcli
sequentialDeploy
Deployinfra

Notice how the converter automatically detected the environment: production declaration and converted it to an approval_gate. Job dependencies (needs:) become sequential edges.

Conversion Mapping

GitHub Actions to OSOP

GitHub ActionsOSOP
workflowOsopWorkflow
jobnode (step/fork/join)
stepstep node
if: conditiondecision node
needs: dependencyedge ordering
on: scheduletimer node
environment: productionapproval node

Airflow to OSOP

AirflowOSOP
DAGOsopWorkflow
BashOperatorcli step
PythonOperatorstep node
BranchPythonOperatordecision node
>> dependenciesedge
schedule_intervaltimer node

BPMN to OSOP

BPMNOSOP
Start Eventstart node
Service Taskstep node
User Taskapproval node
Exclusive Gatewaydecision node
Parallel Gatewayfork/join
Timer Eventtimer node
Sub-Processsubprocess

Exporting Back

OSOP is not a one-way street. Export back to your runtime's format:

export.sh
# Export to GitHub Actions
$ osop export deploy.osop.yaml --to github-actions -o .github/workflows/deploy.yml

# Export to Airflow DAG
$ osop export pipeline.osop.yaml --to airflow -o dags/pipeline.py

# Export to BPMN
$ osop export process.osop.yaml --to bpmn -o process.bpmn

Using the Python API

python-api.py
from osop_interop import GitHubActionsImporter, AirflowExporter

# Import
importer = GitHubActionsImporter()
osop_workflow = importer.convert("path/to/workflow.yml")

# Export
exporter = AirflowExporter()
airflow_dag = exporter.convert("path/to/workflow.osop.yaml")

Using via MCP

If you have the OSOP MCP server installed, your AI agent can convert workflows with a single tool call:

mcp-call.json
// Agent calls osop.import
{
  "tool": "osop.import",
  "arguments": {
    "file_path": ".github/workflows/deploy.yml",
    "source_format": "github-actions"
  }
}
// Returns valid OSOP YAML

Why Convert?

Converting to OSOP gives you:

  • Portability — Your workflow works across 18 AI coding agents and multiple runtimes
  • Execution records — .osoplog captures what actually happened, which your current format does not
  • Risk analysis — Built-in security scanning that GitHub Actions YAML does not provide
  • Visual editing — Drag and drop your workflow in the OSOP editor
  • Optimization — Compare multiple executions to find what to improve

And you can always export back. OSOP is an upgrade, not a migration.