@@ -2,56 +2,58 @@ name: Setup Repository Metadata
22
33on :
44 push :
5- branches :
6- - main
7- paths :
8- - ' .github/workflows/setup-repo.yml'
5+ branches : [main]
6+ workflow_dispatch :
97
108jobs :
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