Agent skill

jsr

jsr release workflow for Deno projects. Use when publishing or releasing packages to JSR (JavaScript Registry) using Deno.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/jsr

SKILL.md

Add deno task release

ts
// scripts/release.ts
const denoJsonPath = new URL("../deno.json", import.meta.url);
const denoJson = JSON.parse(Deno.readTextFileSync(denoJsonPath));
const currentVersion = denoJson.version;

let newVersion = Deno.args[0];

if (!newVersion) {
  console.log(`Current version: ${currentVersion}`);
  const input = prompt("Enter new version:");
  if (!input) {
    console.error("Version is required");
    Deno.exit(1);
  }
  newVersion = input;
}

if (newVersion.startsWith("v")) {
  newVersion = newVersion.substring(1);
}

// Update deno.json
denoJson.version = newVersion;
Deno.writeTextFileSync(
  denoJsonPath,
  JSON.stringify(denoJson, null, 2) + "\n",
);
console.log(`Updated deno.json version to ${newVersion}`);

// Run git commands
async function run(cmd: string[]) {
  console.log(`> ${cmd.join(" ")}`);
  const command = new Deno.Command(cmd[0], {
    args: cmd.slice(1),
    stdout: "inherit",
    stderr: "inherit",
  });
  const { code } = await command.output();
  if (code !== 0) {
    console.error(`Command failed with code ${code}`);
    Deno.exit(code);
  }
}

await run(["git", "add", "deno.json"]);
await run(["git", "commit", "-m", `chore: bump version to ${newVersion}`]);

console.log(
  `\nSuccessfully bumped version to ${newVersion}. Please push to trigger release workflow.`,
);

Add release workflow under .github/workflows/ci.yml

yml
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Setup Deno
        uses: denoland/setup-deno@v2

      - run: deno lint
      - run: deno check
      - run: deno test -P
      - run: deno fmt --check

  release:
    needs: test
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Check version
        id: check
        run: |
          VERSION="v$(jq -r .version deno.json)"
          echo "Version: $VERSION"
          git fetch --tags
          if git rev-parse "$VERSION" >/dev/null 2>&1; then
            echo "Tag $VERSION already exists."
            echo "exists=true" >> "$GITHUB_OUTPUT"
          else
            echo "Tag $VERSION not found."
            echo "exists=false" >> "$GITHUB_OUTPUT"
            echo "version=$VERSION" >> "$GITHUB_OUTPUT"
          fi

      - name: Setup Deno
        if: steps.check.outputs.exists == 'false'
        uses: denoland/setup-deno@v2

      - name: Create Tag and Publish
        if: steps.check.outputs.exists == 'false'
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"

          VERSION="${{ steps.check.outputs.version }}"

          git tag "$VERSION"
          git push origin "$VERSION"
          deno publish

Didn't find tool you were looking for?

Be as detailed as possible for better results