Skip to main content

Sync skills from GitHub

Use GitHub Actions to publish skills whenever their source changes on main. The repository remains the source of truth, while Atlan records the repository, commit, and path for each published version. The workflow below is a copyable CI script. It does not depend on a published Atlan GitHub Action.

Before you start

You need a GitHub repository with Actions enabled, an Atlan workspace ID, and a dedicated Atlan API key whose identity can publish to that workspace. Each skill must be a direct child of one repository directory and include a case-sensitive SKILL.md file:

1. Declare what to publish

Create .atlan/package.json at the repository root:
The manifest rejects unknown fields. In particular, use directory and skills; publishConfig.paths is not supported.

2. Add the API key to GitHub

In the GitHub repository, open Settings → Secrets and variables → Actions and create this repository secret: Never add the API key to .atlan/package.json, the workflow file, logs, or screenshots. The identity behind the key must be a member of every destination workspace declared in the manifest.

3. Add the workflow

Create .github/workflows/atlan-skill-sync.yml:
Change skills/** when the manifest uses another directory. Keep fetch-depth: 0: the CLI needs complete history to record the first and most recent source commits accurately. The script downloads the installer before it runs it. Review any change to that installer origin as a CI dependency change; do not replace it with a curl | sh pipeline. The API key remains only in the GitHub secret.

What the workflow does

  1. Validates .atlan/package.json and the allowed publish branch.
  2. Finds skill folders under publishConfig.directory.
  3. Publishes skills changed since the push’s base commit. A first push, an unresolvable base commit, or an all-zero base publishes every declared skill.
  4. Creates a skill for a new repository path or appends a version when the Registry already has that repository and path.
  5. Skips unchanged content, waits for the Registry security scan, and fails the job when the scan blocks a skill.
The CI runner has no local tracking database. Reconciliation uses the repository and path, not a skill name, because names can be edited or repeated.

Verify the first sync

Commit the manifest and workflow to main. Confirm that the Sync skills to Atlan workflow completes, the skills appear in the intended workspace, and a skill profile shows its repository, commit, and path. If a scan remains pending after 60 seconds, the CLI prints follow-up skill get and skill runs commands. Use those commands to confirm the final scan state before treating a skill as available.

Optional workflow controls

Add one of these arguments to the args array only when the override is reviewed for that run: --prune archives artifacts, so enable it only after confirming the expected removed skill directories. It preserves versions and traces.

Run the same publish locally

.atlan/package.json is required for skill publish. For one local skill without a repository manifest, use Publish skills with the CLI.

Troubleshooting

unknown field "paths" — replace publishConfig.paths with the supported directory and skills fields. This checkout is shallow — set fetch-depth: 0 on actions/checkout. No such resource, or it is not visible to you — confirm the workspace ID and that the identity behind ATLANAI_TOKEN can publish there. Publishing is restricted to main — merge the change to the manifest’s configured branch.