@@ -28,10 +28,17 @@ jobs:
28
28
CODER_URL :${{ secrets.CODER_URL }}
29
29
CODER_SESSION_TOKEN :${{ secrets.CODER_SESSION_TOKEN }}
30
30
TEMPLATE_NAME :${{ inputs.template_name }}
31
+ permissions :
32
+ contents :read
33
+ issues :write
34
+ actions :write
31
35
32
36
steps :
33
37
-name :Checkout repository
34
38
uses :actions/checkout@v4
39
+ with :
40
+ persist-credentials :false
41
+ fetch-depth :0
35
42
36
43
# NOTE: Only required for local testing via nektos/act
37
44
-name :Install gh CLI
@@ -42,11 +49,13 @@ jobs:
42
49
43
50
-name :Extract context key from issue
44
51
id :extract-context
52
+ env :
53
+ ISSUE_URL :${{ inputs.issue_url }}
45
54
run :|
46
- issue_number=$(gh issue view "${{ inputs.issue_url }} " --json number --jq '.number')
55
+ issue_number=" $(gh issue view "${ISSUE_URL} " --json number --jq '.number')"
47
56
context_key="gh-${issue_number}"
48
- echo "context_key=${context_key}" >>$ GITHUB_OUTPUT
49
- echo "CONTEXT_KEY=${context_key}" >>$ GITHUB_ENV
57
+ echo "context_key=${context_key}" >>"${ GITHUB_OUTPUT}"
58
+ echo "CONTEXT_KEY=${context_key}" >>"${ GITHUB_ENV}"
50
59
51
60
-name :Download and install Coder binary
52
61
shell :bash
@@ -58,41 +67,43 @@ jobs:
58
67
else
59
68
ARCH="amd64"
60
69
fi
61
- mkdir -p "$HOME" /.local/bin
62
- curl -fsSL --compressed "$CODER_URL" /bin/coder-linux-${ARCH} -o "$HOME" /.local/bin/coder
63
- chmod +x "$HOME" /.local/bin/coder
64
- echo "$HOME/.local/bin" >>$ GITHUB_PATH
70
+ mkdir -p "${ HOME} /.local/bin"
71
+ curl -fsSL --compressed "$CODER_URL/bin/coder-linux-${ARCH}" -o "${ HOME} /.local/bin/coder"
72
+ chmod +x "${ HOME} /.local/bin/coder"
73
+ echo "$HOME/.local/bin" >>"${ GITHUB_PATH}"
65
74
"$HOME"/.local/bin/coder version
66
75
"$HOME"/.local/bin/coder whoami
67
76
68
77
-name :Create Coder workspace
69
78
id :create-workspace
79
+ env :
80
+ PREFIX :${{ inputs.prefix }}
81
+ CONTEXT_KEY :${{ steps.extract-context.outputs.context_key }}
82
+ RUN_ID :${{ github.run_id }}
70
83
run :|
71
- export WORKSPACE_NAME="${{ inputs.prefix }} -${{ steps.extract-context.outputs.context_key }} -${{ github.run_id } }"
84
+ export WORKSPACE_NAME="${PREFIX} -${CONTEXT_KEY} -${RUN_ID }"
72
85
echo "Creating workspace: $WORKSPACE_NAME"
73
86
./scripts/traiage.sh create
74
- echo "workspace_created=true" >> $GITHUB_OUTPUT
75
- echo "workspace_name=$WORKSPACE_NAME" >> $GITHUB_OUTPUT
76
- echo "WORKSPACE_NAME=${WORKSPACE_NAME}" >> $GITHUB_ENV
87
+ echo "workspace_name=$WORKSPACE_NAME" >> "${GITHUB_OUTPUT}"
88
+ echo "WORKSPACE_NAME=${WORKSPACE_NAME}" >> "${GITHUB_ENV}"
77
89
78
90
-name :Send prompt to AI agent inside workspace
79
91
id :prepare-prompt
92
+ env :
93
+ WORKSPACE_NAME :${{ steps.create-workspace.outputs.workspace_name }}
94
+ ISSUE_URL :${{ inputs.issue_url }}
80
95
run :|
81
96
PROMPT_FILE=/tmp/prompt.txt
82
- trap 'rm -f ${PROMPT_FILE}' EXIT
83
-
84
- # Extract issue content and prepare prompt
85
- issue_url="${{ inputs.issue_url }}"
86
- context_key="${{ steps.extract-context.outputs.context_key }}"
97
+ trap 'rm -f "${PROMPT_FILE}"' EXIT
87
98
88
99
# Fetch issue description using `gh` CLI
89
- issue_description=$(gh issue view "$issue_url ")
100
+ issue_description=$(gh issue view "${ISSUE_URL} ")
90
101
91
102
# Write a prompt to PROMPT_FILE
92
103
cat > "${PROMPT_FILE}" <<EOF
93
104
Analyze the below GitHub issue description, understand the root cause, and make appropriate changes to resolve the issue.
94
105
95
- ISSUE URL: ${issue_url }
106
+ ISSUE URL: ${ISSUE_URL }
96
107
ISSUE DESCRIPTION BELOW:
97
108
98
109
${issue_description}
@@ -107,20 +118,27 @@ jobs:
107
118
echo "Committing and pushing changes in workspace: $WORKSPACE_NAME"
108
119
./scripts/traiage.sh commit-push
109
120
110
- # - name: Create and upload archive
111
- # id: create-archive
112
- # run: |
113
- # echo "Creating archive for workspace: $WORKSPACE_NAME"
114
- # archive_url=$(./scripts/traiage.sh archive)
115
- # echo "archive_url=${archive_url}" >>$ GITHUB_OUTPUT
121
+ -name :Create and upload archive
122
+ id :create-archive
123
+ run :|
124
+ echo "Creating archive for workspace: $WORKSPACE_NAME"
125
+ archive_url=$(./scripts/traiage.sh archive)
126
+ echo "archive_url=${archive_url}" >>"${ GITHUB_OUTPUT}"
116
127
117
128
-name :Report results
129
+ env :
130
+ ISSUE_URL :${{ inputs.issue_url }}
131
+ CONTEXT_KEY :${{ steps.extract-context.outputs.context_key }}
132
+ WORKSPACE_NAME :${{ steps.create-workspace.outputs.workspace_name }}
133
+ ARCHIVE_URL :${{ steps.create-archive.outputs.archive_url }}
118
134
run :|
119
- echo "## AI Triage Results" >> $GITHUB_STEP_SUMMARY
120
- echo "- **Issue URL:** ${{ inputs.issue_url }}" >> $GITHUB_STEP_SUMMARY
121
- echo "- **Context Key:** ${{ steps.extract-context.outputs.context_key }}" >> $GITHUB_STEP_SUMMARY
122
- echo "- **Workspace:** ${{ steps.create-workspace.outputs.workspace_name }}" >> $GITHUB_STEP_SUMMARY
123
- echo "- **Archive URL:** ${{ steps.create-archive.outputs.archive_url }}" >> $GITHUB_STEP_SUMMARY
135
+ {
136
+ echo "## AI Triage Results";
137
+ echo "- **Issue URL:** ${ISSUE_URL}";
138
+ echo "- **Context Key:** ${CONTEXT_KEY}";
139
+ echo "- **Workspace:** ${WORKSPACE_NAME}";
140
+ echo "- **Archive URL:** ${ARCHIVE_URL}"
141
+ } >> "${GITHUB_STEP_SUMMARY}"
124
142
125
143
-name :Cleanup workspace
126
144
if :always() && steps.create-workspace.outputs.workspace_created == 'true'