Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
f5754ad
chore: remove changesets dependencies and workflows
betegon Jan 7, 2026
41587ee
feat: add Craft release configuration
betegon Jan 7, 2026
e850d38
ci: update GitHub Actions for Craft releases
betegon Jan 7, 2026
f518553
docs: update contributor docs for Craft workflow
betegon Jan 7, 2026
21675af
Merge branch 'main' into feat/migrate-to-craft
betegon Jan 7, 2026
ce4339b
remove spacing
betegon Jan 7, 2026
22d75f7
remove spacing
betegon Jan 7, 2026
42d2991
remove default config
betegon Jan 7, 2026
54ecc54
fix: use craft publish via getsentry/publish repo
betegon Jan 7, 2026
ed2a94f
docs: add release flow documentation
betegon Jan 8, 2026
3c9e98e
change action name
betegon Jan 8, 2026
95d2a0e
Merge branch 'main' into feat/migrate-to-craft
betegon Jan 9, 2026
eef79fc
feat: add Electron app build and validation workflow
betegon Jan 9, 2026
ca733ce
docs
betegon Jan 9, 2026
2c810ce
improve docs
betegon Jan 9, 2026
7f00ff0
mention publish
betegon Jan 9, 2026
e7e989b
more docs
betegon Jan 9, 2026
39dc3f5
remove redundant code and simplify update version
betegon Jan 9, 2026
f5f2164
use sentry release bot
betegon Jan 12, 2026
467afc1
remove guide
betegon Jan 12, 2026
d489298
remove changeset stuff
betegon Jan 12, 2026
b95ee97
added regex to match cli binaries and electron files
betegon Jan 12, 2026
45ace77
update regex in .craft.yml to include latest tags and specific file t…
betegon Jan 12, 2026
c0e997e
minor things
BYK Jan 12, 2026
3467ee2
Merge branch 'main' into feat/migrate-to-craft
betegon Jan 12, 2026
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
8 changes: 0 additions & 8 deletions .changeset/README.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/chubby-donkeys-mate.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/cold-lamps-shave.md

This file was deleted.

11 changes: 0 additions & 11 deletions .changeset/config.json

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/orange-hands-smile.md

This file was deleted.

43 changes: 43 additions & 0 deletions .craft.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Craft Release Configuration
# https://getsentry.github.io/craft/configuration/

minVersion: "2.16.0"

versioning:
policy: auto

changelog:
filePath: packages/spotlight/CHANGELOG.md
policy: auto

preReleaseCommand: bash scripts/bump-version.sh

statusProvider:
name: github
config:
contexts:
- "Build"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Status context mismatch may prevent Craft release

Medium Severity

The statusProvider.contexts configuration specifies "Build" as the required status context. However, GitHub Actions status checks are typically named using the format {workflow-name} / {job-name}. Since the workflow is named "Build & Test" and the job is named "Build", the actual status check context will be "Build & Test / Build". If Craft requires an exact match, it won't detect when the build completes, potentially blocking releases. The context should likely be "Build & Test / Build" or use a pattern that matches the full status check name.

Fix in Cursor Fix in Web


requireNames:
- /^built-packages$/
- /^spotlight-binaries$/
- /^electron-binaries$/

targets:
- name: npm
id: spotlight
path: packages/spotlight

- name: github
tagPrefix: "@spotlightjs/spotlight@"
includeNames: /^(spotlight-|Spotlight|latest-).*|.*\.(yml|blockmap)$/

- name: docker
source: ghcr.io/getsentry/spotlight
target: ghcr.io/getsentry/spotlight

- name: docker
source: ghcr.io/getsentry/spotlight
target:
image: ghcr.io/getsentry/spotlight
format: "{{{image}}}:latest"
10 changes: 0 additions & 10 deletions .github/pull_request_template.md

This file was deleted.

73 changes: 72 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ name: Build & Test

on:
push:
branches: [main]
branches:
- main
- "release/**"
pull_request:

concurrency:
Expand Down Expand Up @@ -335,3 +337,72 @@ jobs:
run: |
docker run --rm -d -p 8969:8969 ghcr.io/getsentry/spotlight:${{ github.sha }}
curl -sf --retry 3 --retry-all-errors -o /dev/null 'http://localhost:8969/' && echo "Spotlight ran successfully"

electron-mac:
name: Build Electron App (macOS)
needs: build
runs-on: macos-latest
if: github.event_name == 'push' && (github.ref_name == 'main' || startsWith(github.ref_name, 'release/'))
environment: Production
steps:
- name: Checkout Repo
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Set up Node
uses: actions/setup-node@v6
with:
node-version-file: "package.json"
cache: "pnpm"

- name: Setup dependencies
run: pnpm install

- name: Download Electron build
uses: actions/download-artifact@v5
with:
name: electron-build
path: packages/spotlight/dist-electron/

- name: Validate Electron build files
run: |
if [ ! -d "packages/spotlight/dist-electron/main" ] || [ ! -d "packages/spotlight/dist-electron/renderer" ]; then
echo "Error: Expected directories not found in artifact"
ls -la packages/spotlight/dist-electron/
exit 1
fi
echo "Electron build files validated successfully"

- name: Setup Apple API Key for Notarization
env:
APPLE_API_KEY_BUNDLE: ${{ secrets.APPLE_API_KEY }}
run: |
echo "$APPLE_API_KEY_BUNDLE" | base64 -d > /tmp/apple_key.json
cat /tmp/apple_key.json | jq .private_key -r > /tmp/apple_key.pem
echo "APPLE_API_ISSUER=$(cat /tmp/apple_key.json | jq .issuer_id -r | tr -d '\n\r')" >> $GITHUB_ENV
echo "APPLE_API_KEY_ID=$(cat /tmp/apple_key.json | jq .key_id -r | tr -d '\n\r')" >> $GITHUB_ENV
echo "APPLE_API_KEY=/tmp/apple_key.pem" >> $GITHUB_ENV

- name: Build and Sign Electron App
env:
MAIN_VITE_SENTRY_ORG: ${{ vars.MAIN_VITE_SENTRY_ORG }}
MAIN_VITE_SENTRY_PROJECT: ${{ vars.MAIN_VITE_SENTRY_PROJECT }}
MAIN_VITE_SENTRY_AUTH_TOKEN: ${{ secrets.MAIN_VITE_SENTRY_AUTH_TOKEN }}
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
working-directory: packages/spotlight
run: pnpm build:mac

- name: Store Electron binaries
uses: actions/upload-artifact@v5
with:
name: electron-binaries
if-no-files-found: error
path: |
packages/spotlight/dist-electron/*.dmg
packages/spotlight/dist-electron/*.zip
packages/spotlight/dist-electron/*.blockmap
packages/spotlight/dist-electron/*.yml
15 changes: 15 additions & 0 deletions .github/workflows/changelog-preview.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Changelog Preview workflow
# Shows how PRs will appear in the changelog
# https://getsentry.github.io/craft/

name: Changelog Preview
on:
pull_request:
types: [opened, synchronize, reopened, edited, labeled, unlabeled]

jobs:
changelog-preview:
name: Preview Changelog
uses: getsentry/craft/.github/workflows/changelog-preview.yml@v2
secrets: inherit
Comment on lines +12 to +14

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {}

Copilot Autofix

AI 6 days ago

To fix the problem, add an explicit permissions block that restricts the default GITHUB_TOKEN access for this workflow. Because this workflow is only orchestrating a reusable workflow and does not itself perform any direct repository mutations, a safe and conservative default is contents: read. This adheres to the principle of least privilege while still allowing typical read operations (like fetching code) if needed by the reusable workflow.

The best way to fix this without changing existing functionality is:

  • Add a permissions block at the root level of .github/workflows/changelog-preview.yml, alongside name and on, so that it applies to all jobs in the workflow (including the changelog-preview job).
  • Set contents: read as the minimal permission. If the reusable workflow needs additional scopes (for example, pull-requests: write), those should be added there, but we will not assume extra needs beyond contents: read since we cannot see the implementation of the reusable workflow and we must avoid altering behavior more than necessary.

Concretely:

  • In .github/workflows/changelog-preview.yml, after the name: Changelog Preview line, insert:
permissions:
  contents: read

No imports or additional methods are required, as this is a YAML configuration change only.

Suggested changeset 1
.github/workflows/changelog-preview.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/changelog-preview.yml b/.github/workflows/changelog-preview.yml
--- a/.github/workflows/changelog-preview.yml
+++ b/.github/workflows/changelog-preview.yml
@@ -3,6 +3,8 @@
 # https://getsentry.github.io/craft/
 
 name: Changelog Preview
+permissions:
+  contents: read
 on:
   pull_request:
     types: [opened, synchronize, reopened, edited, labeled, unlabeled]
EOF
@@ -3,6 +3,8 @@
# https://getsentry.github.io/craft/

name: Changelog Preview
permissions:
contents: read
on:
pull_request:
types: [opened, synchronize, reopened, edited, labeled, unlabeled]
Copilot is powered by AI and may make mistakes. Always verify output.

43 changes: 0 additions & 43 deletions .github/workflows/prepare-publish.yml

This file was deleted.

Loading
Loading