Skip to content

Commit a64e02d

Browse files
authored
Merge pull request #77 from Blazity/feat/jira-service-token
Feat/jira service token
2 parents bb32fd3 + e0fe0bb commit a64e02d

18 files changed

Lines changed: 218 additions & 141 deletions

File tree

.claude/skills/init-env/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ The CLI is interactive — let the user complete it. On success, `.vercel/projec
123123

124124
Invoke the `init-jira` subskill via the Skill tool. It detects state and runs phase 1 because `JIRA_BASE_URL` is not yet set in Vercel:
125125

126-
- Asks for `JIRA_BASE_URL` / `JIRA_EMAIL` / `JIRA_API_TOKEN` / `JIRA_PROJECT_KEY` / `COLUMN_AI` / `COLUMN_AI_REVIEW` / `COLUMN_BACKLOG`.
126+
- Asks for `JIRA_BASE_URL` / `JIRA_API_TOKEN` / `JIRA_PROJECT_KEY` / `COLUMN_AI` / `COLUMN_AI_REVIEW` / `COLUMN_BACKLOG`.
127127
- **Pre-generates `JIRA_WEBHOOK_SECRET`** via `openssl rand -hex 32`.
128128
- Emits a single `.env`-format paste-template.
129129
- Walks the user through pasting into the Vercel dashboard (Project Settings → Environment Variables).

.claude/skills/init-jira/SKILL.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ Hold the value for the paste-template below. Even if the user later defers webho
6666
Ask in one prompt (single credential bundle):
6767

6868
- `JIRA_BASE_URL` — e.g. `https://acme.atlassian.net` (no trailing slash, no `/jira`)
69-
- `JIRA_EMAIL` — the bot account's email
70-
- `JIRA_API_TOKEN` — created at https://id.atlassian.com/manage-profile/security/api-tokens
69+
- `JIRA_API_TOKEN` — scoped service-account token (Bearer) from https://id.atlassian.com/manage-profile/security/api-tokens
7170
- `JIRA_PROJECT_KEY` — e.g. `AWT`
7271

7372
Then ask:
@@ -84,7 +83,6 @@ Print this single block for the user to copy into Vercel → Project Settings
8483

8584
```
8685
JIRA_BASE_URL=<value>
87-
JIRA_EMAIL=<value>
8886
JIRA_API_TOKEN=<value>
8987
JIRA_PROJECT_KEY=<value>
9088
COLUMN_AI=<value>

.claude/skills/init-jira/references/column-statuses.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ Each column should contain exactly one status with the matching name. Don't put
3939
## Verify the status spelling
4040

4141
```bash
42-
curl -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
43-
"$JIRA_BASE_URL/rest/api/3/project/$JIRA_PROJECT_KEY/statuses" | \
42+
CLOUD_ID=$(curl -s "$JIRA_BASE_URL/_edge/tenant_info" | jq -r .cloudId)
43+
curl -H "Authorization: Bearer $JIRA_API_TOKEN" \
44+
"https://api.atlassian.com/ex/jira/$CLOUD_ID/rest/api/3/project/$JIRA_PROJECT_KEY/statuses" | \
4445
jq '.[].statuses[].name'
4546
```
4647

.claude/skills/init-jira/references/transitions.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ If the source status doesn't have an outbound transition to the target, draw a n
3232
For an issue currently in `AI`:
3333

3434
```bash
35-
curl -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
36-
"$JIRA_BASE_URL/rest/api/3/issue/$JIRA_PROJECT_KEY-1/transitions" | \
35+
CLOUD_ID=$(curl -s "$JIRA_BASE_URL/_edge/tenant_info" | jq -r .cloudId)
36+
curl -H "Authorization: Bearer $JIRA_API_TOKEN" \
37+
"https://api.atlassian.com/ex/jira/$CLOUD_ID/rest/api/3/issue/$JIRA_PROJECT_KEY-1/transitions" | \
3738
jq '.transitions[] | {name, to: .to.name}'
3839
```
3940

.env.e2e.example

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
# Target server
22
E2E_BASE_URL=https://your-staging.vercel.app
33

4-
# Jira
4+
# Jira (scoped service-account Bearer token; routed through api.atlassian.com)
55
JIRA_BASE_URL=https://your-domain.atlassian.net
6-
JIRA_EMAIL=your-email@example.com
76
JIRA_API_TOKEN=
87
JIRA_PROJECT_KEY=PROJ
98
JIRA_WEBHOOK_SECRET=

.env.example

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Issue Tracker (Jira)
22
# ISSUE_TRACKER_KIND defaults to "jira" (only supported tracker today).
33
JIRA_BASE_URL=https://your-domain.atlassian.net
4-
JIRA_EMAIL=your-email@example.com
4+
# Scoped service-account API token (Bearer). Issue from id.atlassian.com
5+
# under the bot account; requests are routed through api.atlassian.com.
56
JIRA_API_TOKEN=your-jira-api-token
67
JIRA_PROJECT_KEY=PROJ
78

.github/workflows/ci.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ jobs:
3535
env:
3636
E2E_BASE_URL: ${{ secrets.E2E_BASE_URL }}
3737
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
38-
JIRA_EMAIL: ${{ secrets.JIRA_EMAIL }}
3938
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
4039
JIRA_PROJECT_KEY: ${{ secrets.JIRA_PROJECT_KEY }}
4140
JIRA_WEBHOOK_SECRET: ${{ secrets.JIRA_WEBHOOK_SECRET }}
@@ -88,7 +87,6 @@ jobs:
8887
env:
8988
E2E_BASE_URL: ${{ secrets.E2E_BASE_URL }}
9089
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
91-
JIRA_EMAIL: ${{ secrets.JIRA_EMAIL }}
9290
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
9391
JIRA_PROJECT_KEY: ${{ secrets.JIRA_PROJECT_KEY }}
9492
JIRA_WEBHOOK_SECRET: ${{ secrets.JIRA_WEBHOOK_SECRET }}
@@ -141,7 +139,6 @@ jobs:
141139
env:
142140
E2E_BASE_URL: ${{ secrets.E2E_BASE_URL }}
143141
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
144-
JIRA_EMAIL: ${{ secrets.JIRA_EMAIL }}
145142
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
146143
JIRA_PROJECT_KEY: ${{ secrets.JIRA_PROJECT_KEY }}
147144
JIRA_WEBHOOK_SECRET: ${{ secrets.JIRA_WEBHOOK_SECRET }}

.github/workflows/e2e.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ jobs:
2929
env:
3030
E2E_BASE_URL: ${{ secrets.E2E_BASE_URL }}
3131
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
32-
JIRA_EMAIL: ${{ secrets.JIRA_EMAIL }}
3332
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
3433
JIRA_PROJECT_KEY: ${{ secrets.JIRA_PROJECT_KEY }}
3534
JIRA_WEBHOOK_SECRET: ${{ secrets.JIRA_WEBHOOK_SECRET }}
@@ -85,7 +84,6 @@ jobs:
8584
env:
8685
E2E_BASE_URL: ${{ secrets.E2E_BASE_URL }}
8786
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
88-
JIRA_EMAIL: ${{ secrets.JIRA_EMAIL }}
8987
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
9088
JIRA_PROJECT_KEY: ${{ secrets.JIRA_PROJECT_KEY }}
9189
JIRA_WEBHOOK_SECRET: ${{ secrets.JIRA_WEBHOOK_SECRET }}
@@ -141,7 +139,6 @@ jobs:
141139
env:
142140
E2E_BASE_URL: ${{ secrets.E2E_BASE_URL }}
143141
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
144-
JIRA_EMAIL: ${{ secrets.JIRA_EMAIL }}
145142
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
146143
JIRA_PROJECT_KEY: ${{ secrets.JIRA_PROJECT_KEY }}
147144
JIRA_WEBHOOK_SECRET: ${{ secrets.JIRA_WEBHOOK_SECRET }}

0 commit comments

Comments
 (0)