Skip to content

Commit 6e493c1

Browse files
Update setup-repo.yml
1 parent 210a99a commit 6e493c1

File tree

1 file changed

+46
-44
lines changed

1 file changed

+46
-44
lines changed

.github/workflows/setup-repo.yml

Lines changed: 46 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,58 @@ name: Setup Repository Metadata
22

33
on:
44
push:
5-
branches:
6-
- main
7-
paths:
8-
- '.github/workflows/setup-repo.yml'
5+
branches: [main]
6+
workflow_dispatch:
97

108
jobs:
11-
setup-metadata:
9+
setup:
1210
runs-on: ubuntu-latest
1311

1412
steps:
15-
- name: Checkout Code
16-
uses: actions/checkout@v4
17-
18-
- name: Extract Repository Info
19-
id: extract
20-
run: |
21-
echo "REPO_NAME=${GITHUB_REPOSITORY#*/}" >> $GITHUB_OUTPUT
22-
NAME_PARTS=$(echo "${GITHUB_REPOSITORY#*/}" | tr '_' '\n')
23-
echo "${NAME_PARTS}" | nl
24-
echo "TOPICS=[]" > topics.json
25-
26-
mapfile -t parts <<< "$NAME_PARTS"
27-
28-
# Predefined base topics
29-
BASE_TOPICS=("template")
30-
31-
for word in ${NAME_PARTS}; do
32-
BASE_TOPICS+=("$(echo $word | tr '[:upper:]' '[:lower:]')")
33-
done
34-
35-
echo "TOPICS=$(jq -nc --argjson arr "$(printf '%s\n' "${BASE_TOPICS[@]}" | jq -R . | jq -s .)" '$arr')" >> $GITHUB_OUTPUT
36-
37-
- name: Print Extracted Info
38-
run: |
39-
echo "Repo Name: ${{ steps.extract.outputs.REPO_NAME }}"
40-
echo "Topics: ${{ steps.extract.outputs.TOPICS }}"
41-
42-
- name: Set Repository Topics
43-
uses: actions/github-script@v7
44-
with:
45-
github-token: ${{ secrets.PAT_TOKEN }}
46-
script: |
47-
const repo = context.repo.repo;
48-
const owner = context.repo.owner;
49-
const topics = JSON.parse(`${{ steps.extract.outputs.TOPICS }}`);
50-
51-
await github.rest.repos.replaceAllTopics({
13+
- name: Extract Metadata from Repo Name
14+
id: extract
15+
run: |
16+
REPO_NAME="${GITHUB_REPOSITORY##*/}"
17+
18+
# Expected format: PESU_CSE_SE_TaskManager_A_P01
19+
if [[ "$REPO_NAME" =~ PESU_([A-Z]+)_([A-Z]+)_(.+)_([A-Z])_P([0-9]+) ]]; then
20+
DEPARTMENT="${BASH_REMATCH[1]}"
21+
COURSE="${BASH_REMATCH[2]}"
22+
PROJECT="${BASH_REMATCH[3]}"
23+
SECTION="${BASH_REMATCH[4]}"
24+
PID="P${BASH_REMATCH[5]}"
25+
26+
echo "department=$DEPARTMENT" >> $GITHUB_OUTPUT
27+
echo "course=$COURSE" >> $GITHUB_OUTPUT
28+
echo "project=$PROJECT" >> $GITHUB_OUTPUT
29+
echo "section=$SECTION" >> $GITHUB_OUTPUT
30+
echo "project_id=$PID" >> $GITHUB_OUTPUT
31+
32+
TOPICS=$(jq -nc --arg d "$DEPARTMENT" --arg c "$COURSE" --arg p "$PROJECT" --arg s "$SECTION" --arg pid "$PID" \
33+
'[ "pesu", "template-based", "autotag", $d, $c, $p, $s, $pid ]')
34+
echo "TOPICS=$TOPICS" >> $GITHUB_OUTPUT
35+
else
36+
echo "::error title=Invalid Repository Name::Repo name '$REPO_NAME' does not match expected pattern."
37+
exit 1
38+
fi
39+
40+
- name: Set Repository Topics
41+
uses: actions/github-script@v7
42+
with:
43+
github-token: ${{ secrets.PAT_TOKEN || secrets.GITHUB_TOKEN }}
44+
script: |
45+
const repo = context.repo.repo;
46+
const owner = context.repo.owner;
47+
const topics = JSON.parse(`${{ steps.extract.outputs.TOPICS }}`);
48+
49+
try {
50+
const result = await github.rest.repos.replaceAllTopics({
5251
owner,
5352
repo,
5453
names: topics
5554
});
56-
57-
console.log(`Topics set for ${repo}:`, topics);
55+
console.log(`✅ Topics set for ${repo}:`, topics);
56+
} catch (error) {
57+
core.warning("⚠️ Failed to set topics. Make sure PAT_TOKEN is available for private repos.");
58+
core.warning(error.message);
59+
}

0 commit comments

Comments
 (0)