Skip to content

Commit 7555d8f

Browse files
authored
Test
1 parent bc009eb commit 7555d8f

File tree

2 files changed

+112
-37
lines changed

2 files changed

+112
-37
lines changed

.github/workflows/build-run.yaml

Lines changed: 19 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,16 @@ name: Build and Run Java Files
22

33
on:
44
push:
5-
branches:
6-
- main
5+
branches: [ "main" ]
76
pull_request:
8-
branches:
9-
- main
7+
branches: [ "main" ]
108
workflow_dispatch:
119

1210
jobs:
1311
build-and-run:
1412
runs-on: ubuntu-latest
15-
1613
steps:
17-
- name: Checkout code
14+
- name: Checkout
1815
uses: actions/checkout@v3
1916

2017
- name: Set up Java
@@ -23,39 +20,24 @@ jobs:
2320
distribution: 'temurin'
2421
java-version: '21'
2522

26-
- name: Compile all Java files and copy resources
23+
- name: Compile and copy resources
2724
run: |
2825
mkdir -p out/src
2926
javac -d out/src src/*.java
30-
cp src/resources/*.txt out/src
31-
32-
- name: Run each Java file in day order
33-
run: |
34-
# Gather all Java files that match "Day*.java", sorted naturally
35-
files=$(ls src/Day*.java 2>/dev/null | sort -V)
36-
37-
if [ -z "$files" ]; then
38-
echo "No matching files (Day*.java) found."
39-
exit 0
40-
fi
41-
42-
current_day=""
43-
44-
for file in $files; do
45-
class_name=$(basename "$file" .java)
46-
# Extract the numeric day part from "DayXX..." (e.g. "Day11Optimized" -> "10")
47-
day_number=$(echo "$class_name" | sed -n 's/^Day\([0-9]\+\).*/\1/p')
27+
cp src/resources/*.txt out/src || echo "No resource files found."
28+
29+
- name: Set up Node
30+
uses: actions/setup-node@v3
31+
with:
32+
node-version: '16'
4833

49-
# Whenever day_number changes, print a nice header
50-
if [ "$day_number" != "$current_day" ]; then
51-
echo ""
52-
echo "======================================="
53-
echo " Day $day_number"
54-
echo "======================================="
55-
current_day="$day_number"
56-
fi
34+
- name: Install dependencies
35+
run: npm install
5736

58-
echo "Running $class_name..."
59-
java -cp "out/src" "$class_name" || echo "Execution failed for $class_name"
60-
echo ""
61-
done
37+
- name: Run Java files & produce summary
38+
uses: actions/github-script@v6
39+
with:
40+
script: |
41+
const { execSync } = require('child_process');
42+
// Just call your local `scripts/run.js`
43+
execSync('node scripts/run.js', { stdio: 'inherit' });

scripts/run.js

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
const core = require('@actions/core');
2+
const { execSync } = require('child_process');
3+
const fs = require('fs');
4+
const path = require('path');
5+
6+
7+
async function main() {
8+
try {
9+
// 1) Find all Day*.class files in out/src, sorted by day number
10+
// We'll do something like "ls out/src/Day*.class" + sort -V
11+
let out = '';
12+
try {
13+
out = execSync('ls out/src/Day*.class 2>/dev/null | sort -V', {
14+
encoding: 'utf-8',
15+
}).trim();
16+
} catch (e) {
17+
// Possibly no matching files
18+
}
19+
20+
const classFiles = out ? out.split('\n') : [];
21+
if (classFiles.length === 0) {
22+
console.log('No compiled classes named Day*.class found.');
23+
return;
24+
}
25+
26+
// 2) Prepare a summary table
27+
const summaryTable = [
28+
[
29+
{ data: 'Day', header: true },
30+
{ data: 'Class Name', header: true },
31+
{ data: 'Status', header: true },
32+
],
33+
];
34+
35+
let currentDay = null;
36+
37+
// 3) For each Day*.class, extract the day number, run it, etc.
38+
for (const filePath of classFiles) {
39+
// e.g. out/src/Day10.class → Day10
40+
const base = path.basename(filePath, '.class');
41+
const className = base; // e.g. Day10
42+
43+
// Extract the day number from "Day10", "Day10Part2", etc.
44+
const match = className.match(/^Day(\d+)/);
45+
if (!match) {
46+
continue; // skip if it doesn't match "DayNN"
47+
}
48+
const dayNum = match[1];
49+
50+
// If day changed, print a console heading
51+
if (dayNum !== currentDay) {
52+
currentDay = dayNum;
53+
const emoji = '🎄🔹🎄';
54+
console.log('========================================');
55+
console.log(` Day ${dayNum} ${emoji}`);
56+
console.log('========================================\n');
57+
}
58+
59+
console.log(`Running ${className}...`);
60+
let exitCode = 0;
61+
let stdout = '';
62+
try {
63+
// Run the class from out/src
64+
stdout = execSync(`java -cp out/src ${className}`, { encoding: 'utf-8' });
65+
} catch (error) {
66+
exitCode = error.status || 1;
67+
stdout = error.stdout?.toString() || '';
68+
}
69+
70+
console.log(stdout);
71+
const statusMsg = exitCode === 0 ? '✅ Success' : '❌ Failed';
72+
console.log(statusMsg, '\n');
73+
74+
// Append to summary
75+
summaryTable.push([
76+
`${dayNum} ${dayEmoji[dayNum] || '🔹'}`,
77+
`\`${className}\``,
78+
statusMsg,
79+
]);
80+
}
81+
82+
// 4) Write the summary
83+
await core.summary
84+
.addHeading('Build & Run Java Files - Summary', 2)
85+
.addTable(summaryTable)
86+
.write();
87+
88+
} catch (err) {
89+
core.setFailed(`Script error: ${err.message}`);
90+
}
91+
}
92+
93+
main();

0 commit comments

Comments
 (0)