Reusable GitHub Actions workflows and shared tooling packages for the DaVinciBot SvelteKit applications.
Application repositories should call reusable workflows by release tag:
jobs:
ci:
uses: DaVinciBot/shared-workflows/.github/workflows/ci.yml@v3.1.0Available workflows:
.github/workflows/ci.yml: shared quality gates (pnpm check,pnpm lint,pnpm test:unit,pnpm build)..github/workflows/container.yml: build and publish application containers..github/workflows/deploy.yml: deploy applications through Dokploy..github/workflows/e2e.yml: run Playwright end-to-end tests..github/workflows/security-scan.yml: run security scans..github/workflows/publish-packages.yml: publish shared npm packages whenpackages/**changes onmain.
Required repository or organization setup:
- Allow application repositories to use reusable workflows from
DaVinciBot/shared-workflows. - Create and maintain version tags such as
v3.1.0after changes are reviewed. - Grant GitHub Actions
packages: writefor workflows that publish to GHCR. - Grant GitHub Actions
id-token: writefor workflows that create keyless Cosign and npm signatures. - Configure deployment environments
dev,staging, andprodin application repositories, with a required reviewer onprod. - Configure repository secrets (shared across environments):
DOKPLOY_URLDOKPLOY_API_KEYGHCR_TOKEN(PAT withread:packages, used by Dokploy to pull from GHCR)
- Configure environment secrets (one per environment:
dev,staging,prod):DOKPLOY_APP_ID
This repository also publishes shared npm packages used by the apps:
@davincibot/eslint-config: strict ESLint flat config for SvelteKit apps.@davincibot/prettier-config: shared Prettier settings with Svelte and Tailwind plugins.@davincibot/tsconfig: shared TypeScript strictness for SvelteKit apps.
Install them in each app with the required peer dependencies:
pnpm add -D @davincibot/eslint-config @davincibot/prettier-config @davincibot/tsconfig @eslint/js eslint eslint-config-prettier eslint-plugin-svelte globals prettier prettier-plugin-svelte prettier-plugin-tailwindcss typescript-eslintUse the shared ESLint config from eslint.config.js:
import { createConfig } from '@davincibot/eslint-config';
import { fileURLToPath } from 'node:url';
import svelteConfig from './svelte.config.js';
export default createConfig({
tsconfigRootDir: fileURLToPath(new URL('.', import.meta.url)),
svelteConfig
});Use the shared Prettier config from .prettierrc:
"@davincibot/prettier-config"Extend the shared TypeScript config from tsconfig.json:
{
"extends": ["./.svelte-kit/tsconfig.json", "@davincibot/tsconfig/sveltekit"]
}Packages are published by .github/workflows/publish-packages.yml on pushes to
main that modify packages/**, or manually through workflow_dispatch.
Publishing requires the repository secret NPM_TOKEN.