Skip to content

CI/CD Pipeline

Gati uses GitHub Actions for continuous integration and automated npm publishing.

Pipeline Overview

CI Workflow (.github/workflows/ci.yml)

Runs on every push and pull request to main:

yaml
✅ Lint (non-blocking) - Shows warnings but doesn't fail
✅ Build - Builds core and types packages
✅ Test - Runs tests for stable packages

Status: ✅ Passing - All checks green!

CI

Release Workflow (.github/workflows/release.yml)

Automatically publishes to npm when changesets are merged:

yaml
✅ Build stable packages
✅ Run tests
✅ Create version PR or publish to npm
✅ Create GitHub releases

Status: ✅ Ready - Configured and tested, awaiting NPM_TOKEN for automated publishing

Documentation Deployment (.github/workflows/deploy-docs.yml)

Deploys VitePress documentation to GitHub Pages:

yaml
✅ Build VitePress site
✅ Deploy to https://krishnapaul242.github.io/gati/

Status: ✅ Configured - Ready to deploy once GitHub Pages is enabled in repository settings

Package Status

✅ Ready for Publishing

These packages are stable and ready for npm:

  • @gati-framework/core - Core framework functionality
  • @gati-framework/types - TypeScript type definitions

🚧 In Development

These packages have build issues and are excluded from CI:

  • @gati-framework/cli - CLI tools (dependency issues)
  • @gati-framework/runtime - Runtime with Timescape (TypeScript errors)
  • @gati-framework/cloud-* - Cloud provider plugins (depend on runtime)
  • @gati-framework/playground - Visual debugging tool

Publishing Process

1. Create a Changeset

bash
pnpm changeset

Select packages to publish, choose version bump (patch/minor/major), and write changelog.

2. Commit and Push

bash
git add .
git commit -m "chore: prepare release"
git push origin main

3. Automated Publishing

The release workflow will:

  1. Create a "Version Packages" PR
  2. Update package versions and CHANGELOG.md
  3. When merged, automatically publish to npm
  4. Create GitHub releases with changelogs

NPM Token Setup

For maintainers, the NPM_TOKEN secret is required for automated publishing:

bash
# Generate token
npm login
npm token create --type=automation

# Add to GitHub
# Settings → Secrets and variables → Actions
# New secret: NPM_TOKEN

Current Status: ⏳ Awaiting token setup for automated publishing. Manual publishing works via pnpm release.

Build Configuration

Stable Packages Only

The CI/CD pipeline is configured to build only stable packages:

json
{
  "scripts": {
    "release": "pnpm --filter @gati-framework/core --filter @gati-framework/types build && pnpm exec changeset publish"
  }
}

Why Not All Packages?

Some packages have TypeScript compilation errors that need to be fixed:

  • CLI: Cross-package import issues, missing runtime dependency
  • Runtime: Timescape transformer type errors
  • Cloud Providers: Depend on runtime package

These will be added back to CI once fixed.

Lint Configuration

Lint runs on all packages but is non-blocking:

yaml
lint:
  continue-on-error: true  # Don't fail CI on lint errors

Current lint issues (1660 errors, 403 warnings):

  • TypeScript strict mode violations
  • any type usage
  • Unused variables
  • Console statements

These can be fixed gradually without blocking releases.

Testing Strategy

Unit Tests

bash
pnpm test --filter @gati-framework/core --filter @gati-framework/types

E2E Tests

E2E tests require the CLI package to be built, so they're currently skipped in CI.

Coverage

Coverage reports are uploaded to Codecov on Node 20 builds.

Deployment Targets

Documentation

NPM Packages

  • Registry: https://registry.npmjs.org
  • Scope: @gati-framework
  • Access: Public
  • Status: ✅ Core and Types packages published and available

Monitoring

GitHub Actions

View workflow runs: https://github.com/krishnapaul242/gati/actions

NPM Packages

Once published, packages will be available at:

Troubleshooting

Build Failures

If builds fail, check:

  1. TypeScript compilation errors
  2. Missing dependencies
  3. Test failures

Publish Failures

If publishing fails, verify:

  1. NPM_TOKEN secret is set
  2. Package versions are bumped
  3. Changesets are committed

Documentation Deployment

If docs fail to deploy:

  1. Check VitePress build errors
  2. Verify GitHub Pages is enabled
  3. Check workflow permissions

Future Improvements

Planned Enhancements

  • [ ] Add remaining packages to CI once fixed
  • [ ] Enable E2E tests in CI
  • [ ] Add performance benchmarks
  • [ ] Set up automated security scanning
  • [ ] Add bundle size tracking
  • [ ] Implement canary releases

Lint Improvements

  • [ ] Fix TypeScript strict mode issues
  • [ ] Remove any types
  • [ ] Clean up unused variables
  • [ ] Replace console statements with proper logging

Contributing

See the Contributing Guide for how to contribute to Gati's CI/CD infrastructure.

Resources

Released under the MIT License.