diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index f95bff97..e3ddadb4 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -13,7 +13,7 @@ env: NODE_OPTIONS: --max_old_space_size=6144 jobs: - build: + directus-validate: name: Validate runs-on: ubuntu-latest steps: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 83804314..1d7c6ee4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,7 +13,7 @@ env: NODE_OPTIONS: --max_old_space_size=6144 jobs: - build: + lint: name: Lint runs-on: ubuntu-latest steps: diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 3da495cc..6d9c5543 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -13,7 +13,7 @@ env: NODE_OPTIONS: --max_old_space_size=6144 jobs: - build: + check-package-json: name: Package.json runs-on: ubuntu-latest steps: @@ -25,7 +25,7 @@ jobs: uses: pnpm/action-setup@v4.0.0 - name: Package run: pnpm package:json - lockfile: + check-package-lockfile: name: Lockfiles runs-on: ubuntu-latest steps: diff --git a/.github/workflows/readme.yml b/.github/workflows/readme.yml new file mode 100644 index 00000000..091ee25f --- /dev/null +++ b/.github/workflows/readme.yml @@ -0,0 +1,52 @@ +name: README + +on: + # Since we're pushing from this CI, don't run this on the push event because + # that'll trigger an infinite loop + # push: [ main ] + + # Add a schedule to run the job every day at 0:00 UTC + schedule: + - cron: '0 0 * * *' + + # Allow running this workflow manually + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + NODE_OPTIONS: --max_old_space_size=6144 + +jobs: + update-readme: + name: Update & PR + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + - name: Setup pnpm + uses: pnpm/action-setup@v4.0.0 + - name: Install dependencies + shell: bash + run: pnpm install + - name: Update README + run: pnpm run readme + - name: Commit changes + run: | + git config --local user.name \ + "github-actions[bot]" + git config --local user.email \ + "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git diff-index --quiet HEAD \ + || git commit -m "Autocommit: updated at $(date -u)" + - name: Push changes + uses: ad-m/github-push-action@master + with: + force_with_lease: true diff --git a/package.json b/package.json index a4917139..62271361 100644 --- a/package.json +++ b/package.json @@ -8,17 +8,31 @@ "node": ">=18.18.0", "pnpm": "~9" }, + "directus:meta": { + "maintained": [ + "spreadsheet-layout", + "gantt-chart-layout", + "tour-group-interface", + "command-palette-module", + "calculated-fields-bundle" + ] + }, "scripts": { "premkcert": "mkcert -install", "mkcert": "mkcert -ecdsa -key-file .local/caddy/key.pem -cert-file .local/caddy/cert.pem extensions.directus.labs", "dev": "pnpm --stream -r dev", "build": "pnpm --recursive run build", "validate": "pnpm --recursive run validate", + "readme": "node ./scripts/update-readme.js", "package:json": "pnpm --recursive exec node ../../scripts/check-package-json.js", "package:lockfile": "pnpm --recursive exec node ../../scripts/check-lock-files.js", "lint": "eslint --flag unstable_config_lookup_from_file --cache .", "lint:fix": "pnpm run lint --fix" }, + "dependencies": { + "@directus/format-title": "^12.0.0", + "mustache": "^4.2.0" + }, "devDependencies": { "@directus/eslint-config": "github:directus/eslint-config#hannes/temp-workaround", "@nuxt/eslint-config": "^0.7.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f219d637..5a4b59e3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,13 @@ settings: importers: .: + dependencies: + '@directus/format-title': + specifier: ^12.0.0 + version: 12.0.0 + mustache: + specifier: ^4.2.0 + version: 4.2.0 devDependencies: '@directus/eslint-config': specifier: github:directus/eslint-config#hannes/temp-workaround @@ -5233,6 +5240,10 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + mute-stream@1.0.0: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -11162,8 +11173,8 @@ snapshots: '@rollup/plugin-replace@5.0.7(rollup@3.29.5)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@3.29.5) - magic-string: 0.30.17 + '@rollup/pluginutils': 5.1.2(rollup@3.29.5) + magic-string: 0.30.12 optionalDependencies: rollup: 3.29.5 @@ -11212,6 +11223,14 @@ snapshots: optionalDependencies: rollup: 3.29.4 + '@rollup/pluginutils@5.1.2(rollup@3.29.5)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 3.29.5 + '@rollup/pluginutils@5.1.4(rollup@3.29.4)': dependencies: '@types/estree': 1.0.6 @@ -14630,6 +14649,8 @@ snapshots: ms@2.1.3: {} + mustache@4.2.0: {} + mute-stream@1.0.0: {} mute-stream@2.0.0: {} @@ -15917,7 +15938,7 @@ snapshots: vite@4.5.5(@types/node@22.13.1)(sass@1.84.0)(terser@5.38.1): dependencies: esbuild: 0.18.20 - postcss: 8.5.1 + postcss: 8.4.49 rollup: 3.29.5 optionalDependencies: '@types/node': 22.13.1 diff --git a/scripts/templates/readme.md. mustache b/scripts/templates/readme.md. mustache new file mode 100644 index 00000000..1fd9a9c9 --- /dev/null +++ b/scripts/templates/readme.md. mustache @@ -0,0 +1,40 @@ +![Directus Labs Extensions](https://github.com/directus-labs/extensions/assets/1461554/aae72c6c-e47a-4a6f-968a-5cf1d6b5a73d) + +--- + +## 🐰  Introduction + +This repository is for our extensions published under the Directus Labs program. Unlike the core [@directus/directus](https://github.com/directus/directus) project, extensions here may not be actively developed after their initial release unless they are indicated as maintained in the table below. + +## 📦  Extensions + +The extensions in this repository are all published to the Directus Marketplace. + +Some of the published extensions may not be compatible with the sandbox requirements currently, and are only available on Directus instances with the `MARKETPLACE_TRUST` env set to `all`. + +| Extension | Type | Sandboxed | Maintained | +| --------- | --------- | --------- | ---------- | +${formattedPackages.join('\n')}`; +{{#extensions}} +| [{{name}}](//github.com/directus-labs/extensions/tree/main/packages/{{directory}}) | {{type}} | {{sandboxed}} | {{maintained}} | +{{/extensions}} + +## 🔧  Boilerplates + +| Extension | System Name | Type | +| -------------------------------------------------------------------------------------------------- | :--------------------- | :-------- | +| [WYSIWYG](//github.com/directus-labs/extensions/tree/main/boilerplates/input-rich-text-html) | `input-rich-text-html` | Interface | +| [Block Editor](//github.com/directus-labs/extensions/tree/main/boilerplates/input-block-editor) | `input-block-editor` | Interface | +| [Table](//github.com/directus-labs/extensions/tree/main/boilerplates/tabular-layout) | `tabular` | Layout | + +
+ +## ❤️  Contributing + +Please read the [Contributing Guide](//github.com/directus-labs/extensions/blob/main/.github/CONTRIBUTING.md) for this project before submitting Pull Requests or Issues. + +All security vulnerabilities should be reported in accordance with our [Security Policy](//docs.directus.io/contributing/introduction.html#report-security-vulnerability). + +Directus is a premium open-source ([BSL 1.1](//github.com/directus/directus/blob/main/license)) project, made possible with support from our passionate core team, talented contributors, and amazing [GitHub Sponsors](//github.com/sponsors/directus). Thank you all!! + +© 2004-2024, Monospace, Inc. diff --git a/scripts/update-readme.js b/scripts/update-readme.js new file mode 100644 index 00000000..c58b7695 --- /dev/null +++ b/scripts/update-readme.js @@ -0,0 +1,36 @@ +const fs = require('node:fs'); +const { formatTitle } = require('@directus/format-title'); +const Mustache = require('mustache'); + +const metaData = JSON.parse(fs.readFileSync(`./package.json`))['directus:meta']; + +/* Update the packages */ +const packages = fs.readdirSync('./packages'); + +function removePrefix(name) { + if (name.startsWith('@')) { + name = name.split('/')[1]; + } + + if (name.startsWith('directus-extension-')) { + name = name.substring('directus-extension-'.length); + } + + return name; +} + +const formattedPackages = packages.map((packageDir) => { + const packageJson = JSON.parse(fs.readFileSync(`./packages/${packageDir}/package.json`)); + return { + name: formatTitle(removePrefix(packageJson.name)), + type: formatTitle(packageJson['directus:extension'].type), + sandboxed: (packageJson['directus:extension'].sandbox ? '✅' : 'N/A'), + maintained: (metaData.maintained.includes(packageDir) ? '⭐' : ''), + directory: packageDir, + }; +}); + +const readmeTemplate = fs.readFileSync('scripts/templates/readme.md. mustache').toString(); +const readmeOutput = Mustache.render(readmeTemplate, { extensions: formattedPackages }); + +fs.writeFileSync('./readme.md', readmeOutput);