Skip to content

Commit 54f707f

Browse files
authored
Quadratic Fit actually works now (#46)
1 parent 0d81966 commit 54f707f

4 files changed

Lines changed: 198 additions & 1 deletion

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: Disable auto-reopen after second close
2+
3+
on:
4+
pull_request:
5+
types: [closed]
6+
7+
permissions:
8+
issues: write
9+
pull-requests: write
10+
11+
jobs:
12+
disable:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Disable automatic reopen
16+
uses: actions/github-script@v7
17+
with:
18+
script: |
19+
const pr = context.payload.pull_request;
20+
21+
// Ignore merged PRs
22+
if (pr.merged) return;
23+
24+
const labels = pr.labels.map(l => l.name);
25+
26+
// Only act if it was previously reopened once
27+
if (!labels.includes('reopen-used')) return;
28+
29+
// Mark auto-reopen as permanently disabled
30+
await github.rest.issues.addLabels({
31+
owner: context.repo.owner,
32+
repo: context.repo.repo,
33+
issue_number: pr.number,
34+
labels: ['reopen-locked']
35+
});
36+
37+
await github.rest.issues.createComment({
38+
owner: context.repo.owner,
39+
repo: context.repo.repo,
40+
issue_number: pr.number,
41+
body:
42+
"This PR was reopened once and then closed again.\n\n" +
43+
"Automatic reopening via `/not-a-mistake` is now disabled.\n" +
44+
"Maintainers may still reopen this PR manually if needed."
45+
});

.github/workflows/mistake-pr.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: Auto-close mistake PRs
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize, reopened]
6+
7+
permissions:
8+
issues: write
9+
pull-requests: write
10+
11+
jobs:
12+
detect:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Detect mistake PR
16+
uses: actions/github-script@v7
17+
with:
18+
script: |
19+
const pr = context.payload.pull_request;
20+
const labels = pr.labels.map(l => l.name);
21+
22+
// Skip if auto-reopen is disabled or already used
23+
if (labels.includes('reopen-used') || labels.includes('reopen-locked')) {
24+
return;
25+
}
26+
27+
// Get changed files
28+
const files = await github.paginate(
29+
github.rest.pulls.listFiles,
30+
{
31+
owner: context.repo.owner,
32+
repo: context.repo.repo,
33+
pull_number: pr.number,
34+
}
35+
);
36+
37+
// Detect newly added OR copied files
38+
const hasNewFiles = files.some(
39+
f => f.status === 'added' || f.status === 'copied'
40+
);
41+
42+
if (!hasNewFiles) return;
43+
44+
// Label as mistake PR
45+
await github.rest.issues.addLabels({
46+
owner: context.repo.owner,
47+
repo: context.repo.repo,
48+
issue_number: pr.number,
49+
labels: ['mistake-pr']
50+
});
51+
52+
// Explain and close
53+
await github.rest.issues.createComment({
54+
owner: context.repo.owner,
55+
repo: context.repo.repo,
56+
issue_number: pr.number,
57+
body:
58+
"This PR was automatically closed because it adds new files.\n\n" +
59+
"If this is intentional, comment `/not-a-mistake` **once** to reopen it."
60+
});
61+
62+
await github.rest.pulls.update({
63+
owner: context.repo.owner,
64+
repo: context.repo.repo,
65+
pull_number: pr.number,
66+
state: 'closed'
67+
});

.github/workflows/reopen-once.yml

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
name: Reopen mistake PR once
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
7+
permissions:
8+
issues: write
9+
pull-requests: write
10+
11+
jobs:
12+
reopen:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Handle /not-a-mistake
16+
uses: actions/github-script@v7
17+
with:
18+
script: |
19+
const comment = context.payload.comment;
20+
const issue = context.payload.issue;
21+
22+
if (!issue.pull_request) return;
23+
if (comment.body.trim() !== '/not-a-mistake') return;
24+
25+
const pr = await github.rest.pulls.get({
26+
owner: context.repo.owner,
27+
repo: context.repo.repo,
28+
pull_number: issue.number
29+
});
30+
31+
const labels = pr.data.labels.map(l => l.name);
32+
33+
// Only PR author may use this
34+
if (comment.user.login !== pr.data.user.login) {
35+
return;
36+
}
37+
38+
// Must be closed and labeled mistake-pr
39+
if (pr.data.state !== 'closed') return;
40+
if (!labels.includes('mistake-pr')) return;
41+
42+
// Auto-reopen already disabled
43+
if (labels.includes('reopen-used') || labels.includes('reopen-locked')) {
44+
await github.rest.issues.createComment({
45+
owner: context.repo.owner,
46+
repo: context.repo.repo,
47+
issue_number: issue.number,
48+
body:
49+
"Automatic reopening is disabled for this PR.\n\n" +
50+
"A maintainer may still reopen it manually if needed."
51+
});
52+
return;
53+
}
54+
55+
// Mark reopen as used FIRST (prevents race)
56+
await github.rest.issues.addLabels({
57+
owner: context.repo.owner,
58+
repo: context.repo.repo,
59+
issue_number: issue.number,
60+
labels: ['reopen-used']
61+
});
62+
63+
await github.rest.issues.removeLabel({
64+
owner: context.repo.owner,
65+
repo: context.repo.repo,
66+
issue_number: issue.number,
67+
name: 'mistake-pr'
68+
});
69+
70+
await github.rest.pulls.update({
71+
owner: context.repo.owner,
72+
repo: context.repo.repo,
73+
pull_number: issue.number,
74+
state: 'open'
75+
});
76+
77+
await github.rest.issues.createComment({
78+
owner: context.repo.owner,
79+
repo: context.repo.repo,
80+
issue_number: issue.number,
81+
body:
82+
"PR reopened.\n\n" +
83+
"If this PR is closed again, automatic reopening will be disabled."
84+
});

TeamCode/src/main/java/org/firstinspires/ftc/teamcode/pedroPathing/Tuning.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.pedropathing.paths.*;
2323
import com.pedropathing.telemetry.SelectableOpMode;
2424
import com.pedropathing.util.*;
25+
import static com.pedropathing.math.MathFunctions.quadraticFit;
2526
import com.qualcomm.robotcore.eventloop.opmode.OpMode;
2627
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
2728
import com.qualcomm.robotcore.hardware.DcMotorEx;
@@ -856,7 +857,7 @@ public void loop() {
856857
}
857858

858859
case DONE: {
859-
double[] coeffs = MathFunctions.QuadraticRegression.quadraticFit(data);
860+
double[] coeffs = quadraticFit(data);
860861

861862
telemetryM.debug("Tuning Complete");
862863
telemetryM.debug("kFriction (kQ)", coeffs[1]);

0 commit comments

Comments
 (0)