Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,33 +1,28 @@
name: check_updates
# GENERATED BY ./check_updates.ts -- DO NOT DIRECTLY EDIT

name: check_updates
on:
workflow_dispatch:
workflow_dispatch: {}
schedule:
# do this once per day
- cron: "0 7 * * *"

- cron: 0 7 * * *
jobs:
build:
name: check updates
if: github.repository == 'dprint/dprint-plugin-sql'
runs-on: ubuntu-latest
timeout-minutes: 45

steps:
- name: Clone repository
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
token: ${{ secrets.GH_DPRINTBOT_PAT }}

- uses: denoland/setup-deno@v2
- uses: dsherret/rust-toolchain-file@v1

token: '${{ secrets.GH_DPRINTBOT_PAT }}'
- uses: denoland/setup-deno@667a34cdef165d8d2b2e98dde39547c9daac7282 # v2
- uses: dsherret/rust-toolchain-file@3551321aa44dd44a0393eb3b6bdfbc5d25ecf621 # v1
- name: Run script
run: |
run: |-
git config user.email "dprintbot@users.noreply.github.com"
git config user.name "dprintbot"
deno run -A ./scripts/update.ts
# This is necessary to prevent GH automatically disabling this workflow after 60 days.
workflow-keepalive:
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
Expand Down
52 changes: 52 additions & 0 deletions .github/workflows/check_updates.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/usr/bin/env -S deno run -A
import { job, workflow } from "jsr:@david/gagen@^0.5.0";

const buildJob = job("build", {
name: "check updates",
if: "github.repository == 'dprint/dprint-plugin-sql'",
runsOn: "ubuntu-latest",
timeoutMinutes: 45,
steps: [
{
name: "Clone repository",
uses: "actions/checkout@v6",
with: { token: "${{ secrets.GH_DPRINTBOT_PAT }}" },
},
{ uses: "denoland/setup-deno@v2" },
{ uses: "dsherret/rust-toolchain-file@v1" },
{
name: "Run script",
run: [
`git config user.email "dprintbot@users.noreply.github.com"`,
`git config user.name "dprintbot"`,
"deno run -A ./scripts/update.ts",
],
},
],
});

// This is necessary to prevent GH automatically disabling this workflow after 60 days.
const keepaliveJob = job("workflow-keepalive", {
if: "github.event_name == 'schedule'",
runsOn: "ubuntu-latest",
permissions: { actions: "write" },
steps: [
{ uses: "liskin/gh-workflow-keepalive@f72ff1a1336129f29bf0166c0fd0ca6cf1bcb38c" },
],
});

workflow({
name: "check_updates",
on: {
workflow_dispatch: {},
schedule: [
// do this once per day
{ cron: "0 7 * * *" },
],
},
jobs: [buildJob, keepaliveJob],
}).writeOrLint({
filePath: new URL("./check_updates.generated.yml", import.meta.url),
header: "# GENERATED BY ./check_updates.ts -- DO NOT DIRECTLY EDIT",
pinDeps: true,
});
93 changes: 93 additions & 0 deletions .github/workflows/ci.generated.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# GENERATED BY ./ci.ts -- DO NOT DIRECTLY EDIT

name: CI
on:
pull_request:
branches:
- main
push:
branches:
- main
tags:
- '*'
jobs:
build:
name: '${{ matrix.config.kind }} ${{ matrix.config.os }}'
runs-on: '${{ matrix.config.os }}'
strategy:
matrix:
config:
- os: ubuntu-latest
kind: test_release
- os: ubuntu-latest
kind: test_debug
env:
CARGO_INCREMENTAL: 0
RUST_BACKTRACE: full
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: dsherret/rust-toolchain-file@3551321aa44dd44a0393eb3b6bdfbc5d25ecf621 # v1
- name: Install wasm32 target
if: matrix.config.kind == 'test_release'
run: rustup target add wasm32-unknown-unknown
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
save-if: '${{ github.ref == ''refs/heads/main'' }}'
- uses: denoland/setup-deno@667a34cdef165d8d2b2e98dde39547c9daac7282 # v2
with:
deno-version: v2.x
- name: Build debug
if: matrix.config.kind == 'test_debug'
run: cargo build
- name: Build release
if: matrix.config.kind == 'test_release'
run: cargo build --target wasm32-unknown-unknown --features wasm --release
- name: Test debug
if: matrix.config.kind == 'test_debug'
run: cargo test
- name: Test release
if: matrix.config.kind == 'test_release'
run: cargo test --release
- name: Get tag version
id: get_tag_version
if: 'matrix.config.kind == ''test_release'' && startsWith(github.ref, ''refs/tags/'')'
run: 'echo "TAG_VERSION=${GITHUB_REF/refs\/tags\//}" >> "$GITHUB_OUTPUT"'
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
if: matrix.config.kind == 'test_release'
with:
node-version: 24.x
registry-url: 'https://registry.npmjs.org'
- name: Setup and test npm deployment
if: matrix.config.kind == 'test_release'
run: |-
cd deployment/npm
npm install
node setup.js
npm run test
- name: Pre-release
if: 'matrix.config.kind == ''test_release'' && startsWith(github.ref, ''refs/tags/'')'
run: |-
# update config schema to have version
sed -i 's/sql\/0.0.0/sql\/${{ steps.get_tag_version.outputs.TAG_VERSION }}/' deployment/schema.json
# rename the wasm file
(cd target/wasm32-unknown-unknown/release/ && mv dprint_plugin_sql.wasm plugin.wasm)
# create release notes
deno run -A ./scripts/generateReleaseNotes.ts ${{ steps.get_tag_version.outputs.TAG_VERSION }} > ${{ github.workspace }}-CHANGELOG.txt
- name: Release
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844
if: 'matrix.config.kind == ''test_release'' && startsWith(github.ref, ''refs/tags/'')'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
with:
files: |-
target/wasm32-unknown-unknown/release/plugin.wasm
deployment/schema.json
body_path: '${{ github.workspace }}-CHANGELOG.txt'
draft: false
- name: Lint workflow generation
if: matrix.config.kind == 'test_debug'
run: |-
./.github/workflows/ci.ts --lint
./.github/workflows/publish_npm.ts --lint
./.github/workflows/release.ts --lint
./.github/workflows/check_updates.ts --lint
142 changes: 142 additions & 0 deletions .github/workflows/ci.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
#!/usr/bin/env -S deno run -A
import { conditions, defineMatrix, expr, job, step, workflow } from "jsr:@david/gagen@^0.5.0";

const pluginName = "sql";
const cargoWasmName = `dprint_plugin_${pluginName}`;

const matrix = defineMatrix({
config: [
{ os: "ubuntu-latest", kind: "test_release" },
{ os: "ubuntu-latest", kind: "test_debug" },
],
});

const kind = expr("matrix.config.kind");
const os = expr("matrix.config.os");

const isRelease = kind.equals("test_release");
const isDebug = kind.equals("test_debug");
const isTag = conditions.isTag();
const isReleaseAndTag = isRelease.and(isTag);

const getTagVersion = step({
id: "get_tag_version",
name: "Get tag version",
if: isReleaseAndTag,
run: `echo "TAG_VERSION=\${GITHUB_REF/refs\\/tags\\//}" >> "$GITHUB_OUTPUT"`,
outputs: ["TAG_VERSION"],
});

const buildJob = job("build", {
name: `${kind} ${os}`,
runsOn: os,
strategy: { matrix },
env: {
CARGO_INCREMENTAL: 0,
RUST_BACKTRACE: "full",
},
steps: [
{ uses: "actions/checkout@v6" },
{ uses: "dsherret/rust-toolchain-file@v1" },
{
name: "Install wasm32 target",
if: isRelease,
run: "rustup target add wasm32-unknown-unknown",
},
{
uses: "Swatinem/rust-cache@v2",
with: { "save-if": "${{ github.ref == 'refs/heads/main' }}" },
},
// deno is needed by the "Lint workflow generation" step (test_debug)
// and by the "Pre-release" step (test_release on tag). Install it
// once at the top of every job to keep the matrix steps simple.
{
uses: "denoland/setup-deno@v2",
with: { "deno-version": "v2.x" },
},

{ name: "Build debug", if: isDebug, run: "cargo build" },
{
name: "Build release",
if: isRelease,
run: "cargo build --target wasm32-unknown-unknown --features wasm --release",
},

{ name: "Test debug", if: isDebug, run: "cargo test" },
{ name: "Test release", if: isRelease, run: "cargo test --release" },

getTagVersion,

// NPM
{
uses: "actions/setup-node@v6",
if: isRelease,
with: {
"node-version": "24.x",
"registry-url": "https://registry.npmjs.org",
},
},
{
name: "Setup and test npm deployment",
if: isRelease,
run: [
"cd deployment/npm",
"npm install",
"node setup.js",
"npm run test",
],
},

// GITHUB RELEASE
{
name: "Pre-release",
if: isReleaseAndTag,
run: [
"# update config schema to have version",
`sed -i 's/${pluginName}\\/0.0.0/${pluginName}\\/${getTagVersion.outputs.TAG_VERSION}/' deployment/schema.json`,
"# rename the wasm file",
`(cd target/wasm32-unknown-unknown/release/ && mv ${cargoWasmName}.wasm plugin.wasm)`,
"# create release notes",
`deno run -A ./scripts/generateReleaseNotes.ts ${getTagVersion.outputs.TAG_VERSION} > \${{ github.workspace }}-CHANGELOG.txt`,
],
},
{
name: "Release",
// pinned because softprops/action-gh-release was once compromised
uses: "softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844",
if: isReleaseAndTag,
env: { GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" },
with: {
files: [
"target/wasm32-unknown-unknown/release/plugin.wasm",
"deployment/schema.json",
].join("\n"),
body_path: "${{ github.workspace }}-CHANGELOG.txt",
draft: false,
},
},
{
name: "Lint workflow generation",
if: isDebug,
run: [
"./.github/workflows/ci.ts --lint",
"./.github/workflows/publish_npm.ts --lint",
"./.github/workflows/release.ts --lint",
"./.github/workflows/check_updates.ts --lint",
],
},
],
});

workflow({
name: "CI",
on: {
pull_request: { branches: ["main"] },
push: { branches: ["main"], tags: ["*"] },
},
jobs: [buildJob],
}).writeOrLint({
filePath: new URL("./ci.generated.yml", import.meta.url),
header: "# GENERATED BY ./ci.ts -- DO NOT DIRECTLY EDIT",
pinDeps: true,
});
Loading