Skip to content

Commit 2a8371c

Browse files
committed
feat: release 2.8.41
1 parent db23439 commit 2a8371c

9 files changed

Lines changed: 275 additions & 80 deletions

File tree

.agent/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,4 @@ This directory contains the project's technical constitution, specialized skills
5555

5656

5757
---
58-
*Generated automatically by `/doc-sync` on Mon Apr 13 22:12:00 CEST 2026*
58+
*Generated automatically by `/doc-sync` on Thu Apr 16 17:03:00 CEST 2026*

.agent/rules/03_execution_rules.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ To ensure quality and clarity in every development cycle, all non-trivial featur
7171

7272
- **STRICT PROHIBITION:** No `git commit`, `git push`, or `git tag` without using `/git-flow` or an explicit user order.
7373
- **BRANCHING MANDATORY:** ALL developments, features, bug fixes, and interventions MUST be done in a dedicated Git branch separated from `master`. Committing directly to the `master` branch is strictly prohibited.
74+
- **RELEASE DELIVERY:** The release delivery process MUST always occur in a branch named `vX.XX.XX` (e.g., `v2.8.41`). Modifying the `main` branch directly is utterly prohibited.
75+
- **VERSION NUMBERS:** Changing version numbers automatically without an explicit user request is prohibited.
76+
- **RELEASE PROCESS:** The release process consists uniquely of pushing the version branch with the release notes as the content (commit message), *after* all verifications are successful.
7477
- **Conventional Commits:** Use `feat:`, `fix:`, `chore:`, `docs:`, `perf:`, `refactor:`, `style:`, `test:`, `ci:`. Breaking changes must be marked with `!` after type/scope or `BREAKING CHANGE:` in footer.
7578
- **Commit Validation:** Commits are automatically linted via `commitlint`. Non-compliant messages will be rejected by the pre-commit hook.
7679
- **History Documentation:** Use `npm run commit` to generate structured history.

.agent/rules/04_best_practices.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ Beyond hard constraints, following established patterns ensures code durability,
8282

8383
- Release workflows (via `/git-flow`) MUST force push tags to the origin at each release to ensure synchronization with GitHub.
8484
- The `/git-flow` workflow MUST always be preceded by a successful `/release-preflight` execution.
85-
- Only the Release Manager is authorized to decide when to increment version numbers, or incrementing occurs automatically after a `git-flow` commit.
85+
- Version incrementing MUST only happen upon an explicit request. Automatic version bumping is strictly prohibited.
86+
- The release delivery process MUST be executed strictly on a `vX.XX.XX` branch. No modifications to the main branch are allowed during release.
8687

8788
### 13. Release Artifact Integrity
8889

.agent/workflows/git-flow.md

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,27 @@ category: tool
88

99
This workflow MUST be orchestrated by the **Release Manager**.
1010

11-
1. **Run Release Preflight Workflow**
11+
## 🧠 Constraints
12+
13+
- **Branch Mandatory**: The release process MUST only be executed on a dedicated branch named `vX.XX.XX` (e.g., `v2.8.41`).
14+
- **No Main Modification**: Pushing to the `main` or `master` branch is strictly prohibited here.
15+
- **No Automatic Bumping**: Version numbers MUST NOT be automatically incremented after release unless explicitly requested by the user.
16+
17+
## 🛠️ Implementation
18+
19+
// turbo
20+
1. **Branch Verification**
21+
- Verify the current Git branch matches the `vX.XX.XX` pattern.
22+
23+
```bash
24+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
25+
if [[ ! "$CURRENT_BRANCH" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
26+
echo "ERROR: Release process must be executed on a vX.XX.XX branch."
27+
exit 1
28+
fi
29+
```
30+
31+
2. **Run Release Preflight Workflow**
1232
- Execute the `/release-preflight` workflow to ensure full consistency and test passing.
1333
- **CRITICAL**: Do NOT proceed if `/release-preflight` fails.
1434

@@ -18,8 +38,8 @@ This workflow MUST be orchestrated by the **Release Manager**.
1838
```
1939

2040
// turbo
21-
2. **Commit Current Changes**
22-
- Commit all pending changes including `Changelog` updates for the current version.
41+
3. **Commit Release Notes**
42+
- Commit all pending changes. The commit message MUST be strictly formatted as the release notes extracted from the `Changelog`.
2343

2444
```bash
2545
# Extract content between the first version header and the next one
@@ -30,47 +50,19 @@ This workflow MUST be orchestrated by the **Release Manager**.
3050
```
3151

3252
// turbo
33-
3. **Create Tag for Current Version with Changelog content**
34-
- Extract the latest release notes and create an annotated tag.
53+
4. **Create Tag for Current Version**
54+
- Create an annotated tag incorporating the release notes.
3555

3656
```bash
37-
# Extract content between the first version header and the next one
38-
TAG_MSG=$(awk "/^$CURRENT_VER/,/^([0-9]+\.[0-9]+\.[0-9]+)/ {if (\$0 !~ /^([0-9]+\.[0-9]+\.[0-9]+)/) print}" Changelog | sed '/^$/d')
39-
git tag -a v$CURRENT_VER -m "Release $CURRENT_VER" -m "$TAG_MSG"
57+
git tag -a v$CURRENT_VER -m "Release $CURRENT_VER" -m "$RELEASE_NOTES"
4058
```
4159

4260
// turbo
43-
4. **Push Branch and Tag**
44-
- Push to the remote repository.
61+
5. **Push Branch and Tag**
62+
- Push the current branch and the tag to the remote repository.
4563

4664
```bash
47-
git push origin main
65+
git push origin $CURRENT_BRANCH
4866
git push origin v$CURRENT_VER
4967
```
5068

51-
// turbo
52-
5. **Post-Push: Increment Version for Next Cycle**
53-
- Calculate the next patch version and update files.
54-
55-
```bash
56-
NEW_VER=$(echo $CURRENT_VER | awk -F. '{print $1"."$2"."($3+1)}')
57-
echo $NEW_VER > CURRENT_VERSION.txt
58-
# Update all version occurrences in mysqltuner.pl
59-
perl -pi -e "s/\Q$CURRENT_VER\E/$NEW_VER/g" mysqltuner.pl
60-
61-
DATE=$(date +%Y-%m-%d)
62-
echo -e "$NEW_VER $DATE\n\n- \n" > tmp_changelog && cat Changelog >> tmp_changelog && mv tmp_changelog Changelog
63-
```
64-
65-
// turbo
66-
6. **Commit Version Bump**
67-
- Commit the incremented version for the next development cycle.
68-
69-
```bash
70-
git add CURRENT_VERSION.txt mysqltuner.pl Changelog
71-
npx commitlint --from=HEAD~1 # Or simply use npm run commit if not automated
72-
git commit -m "chore: bump version to $NEW_VER"
73-
git push origin main
74-
```
75-
76-
// turbo

Changelog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- ci: enhance Quality Gate to strictly enforce zero-warning policy on GitHub Actions tests.
66
- ci: implement dynamic CI test environment detection by wrapping configuration extraction.
7+
- ci: refactor GitHub Actions release and prerelease workflows to support dynamic versions and checksum generation.
78
- fix: Restore compatibility with older Perl versions (by @jasongill).
89
- feat: implement idiomatic Perl Boolean practices across the project (#34).
910
- refactor: update CLI metadata to use `undef` as default for string/path options.

POTENTIAL_ISSUES

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,5 @@ The following external commands are currently used via `execute_system_command`
158158
- Refactored `%CLI_METADATA` defaults from `'0'` to `undef` for string/path options.
159159
- Wrapped template reading logic in `get_template_model` to prevent `uninitialized value` warnings during `require`.
160160
- Verified 100% test stability (262 tests passed).
161+
- [x] **Zero-Warning Enforcement**: Fixed `removed_innodb_vars.t` mocking warnings and `mysql_80_modeling_checks` uninitialized values. Implemented strict Exit 1 policy on GitHub Actions CI.
162+
- [x] **Dynamic CI Discovery**: Created perl wrapper to dynamically parse `mysql_support.md` and `mariadb_support.md` allowing testing configurations to be uncoupled from the `Makefile`.

build/refactor_mocks.pl

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/env perl
2+
use strict;
3+
use warnings;
4+
use File::Slurp;
5+
6+
my @files = glob("tests/*.t");
7+
foreach my $file (@files) {
8+
next unless -f $file;
9+
10+
my $content = read_file($file);
11+
my $original = $content;
12+
13+
# Only act if we see testing of mysqltuner (has myvar)
14+
next unless $content =~ /\%main::myvar/ || $content =~ /\%myvar/;
15+
16+
# 1. Require TestHelper safely at the top, after loading mysqltuner
17+
if ($content =~ /(require [\'\"].*mysqltuner\.pl[\'\"];?)/) {
18+
unless ($content =~ /MySQLTuner::TestHelper/) {
19+
$content =~ s/(require [\'\"].*mysqltuner\.pl[\'\"];?)/$1\nrequire '.\/tests\/MySQLTuner\/TestHelper.pm';/s;
20+
}
21+
} elsif ($content =~ /(require \$script;?)/) {
22+
unless ($content =~ /MySQLTuner::TestHelper/) {
23+
$content =~ s/(require \$script;?)/$1\nrequire '.\/tests\/MySQLTuner\/TestHelper.pm';/s;
24+
}
25+
} else {
26+
# Can't find require mysqltuner
27+
unless ($content =~ /MySQLTuner::TestHelper/) {
28+
$content =~ s/(use Test::More;.*?\n)/$1\nrequire '.\/tests\/MySQLTuner\/TestHelper.pm';\n/s;
29+
}
30+
}
31+
32+
# 2. Modify assignments to preserve defaults
33+
# Find `%main::myvar = (` and replace with `%main::myvar = ( %main::myvar,`
34+
$content =~ s/(\%main::myvar\s*=\s*\()/$1 \%main::myvar, /g;
35+
$content =~ s/(\%main::mystat\s*=\s*\()/$1 \%main::mystat, /g;
36+
$content =~ s/(\%main::mycalc\s*=\s*\()/$1 \%main::mycalc, /g;
37+
38+
# 3. Add reset_state calls.
39+
# Replace global %main::myvar with reset_state + local
40+
$content =~ s/(\%main::myvar\s*=\s*\()/MySQLTuner::TestHelper::reset_state();\n $1/g;
41+
42+
# Handle files with local sub reset_state that mocks things.
43+
if ($content =~ /sub reset_state \{/) {
44+
# Strip their bodies or remove entirely
45+
$content =~ s/sub reset_state \{.*?\n\}//ms;
46+
$content =~ s/reset_state\(\);/MySQLTuner::TestHelper::reset_state();/g;
47+
}
48+
49+
if ($content ne $original) {
50+
write_file($file, $content);
51+
print "Updated $file\n";
52+
}
53+
}

releases/v2.8.41.md

Lines changed: 58 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@
77
```text
88
2.8.41 2026-04-13
99
10-
- fix: Restore compatibility with older Perl versions (by @jasongill).
10+
- chore: automated project maintenance and cleanup (extracted `RULES.md`, `MEMORY_DB.md`, `TESTS.md`).
1111
- feat: implement idiomatic Perl Boolean practices across the project (#34).
12-
- refactor: update CLI metadata to use `undef` as default for string/path options.
13-
- refactor: replace non-idiomatic `eq '0'`, `ne 0`, etc., with standard truthiness checks.
12+
- feat: add recommendation for `table_open_cache_instances` based on CPU cores (#480).
13+
- feat: improve syslog and systemd journal detection for error logs (#440).
14+
- feat: initialize `$mysqllogin` to avoid uninitialized value warnings (#490).
15+
- fix: Restore compatibility with older Perl versions (by @jasongill).
1416
- fix: wrap template loading in `get_template_model()` to avoid `uninitialized value` warnings during `require`.
1517
- fix: allow `--updateversion` to work on hosts without `mysql`/`mariadb` installed (#36).
1618
- fix: skip local SSL certificate warnings if they are in an inaccessible `datadir` (#33).
1719
- fix: correct false positives in `check_removed_innodb_variables` by distinguishing real server variables from internal ones (#32).
18-
- refactor: replace "master"/"slave" terminology with "source"/"replica" for cultural sensitivity (#888).
1920
- fix: improve join_buffer_size recommendation formatting in Variables to Adjust (#881).
2021
- fix: suppress MySQL client warning regarding 'DISABLED' boolean value for SSL (#887).
2122
- fix: correctly handle `--defaults-file` and `--defaults-extra-file` without dropping options (#605).
@@ -25,11 +26,16 @@
2526
- fix: prevent `AUTO_INCREMENT` capacity false positives for empty tables (#37).
2627
- fix: refactor InnoDB Redo Log Capacity logic to be workload-based and avoid false positives (#714, #737, #777).
2728
- fix: add guards against division by zero in calculations for improved stability (#435).
28-
- feat: add recommendation for `table_open_cache_instances` based on CPU cores (#480).
29-
- feat: improve syslog and systemd journal detection for error logs (#440).
30-
- feat: initialize `$mysqllogin` to avoid uninitialized value warnings (#490).
31-
- chore: automated project maintenance and cleanup (extracted `RULES.md`, `MEMORY_DB.md`, `TESTS.md`).
29+
- fix: add truthiness guards to `mysql_innodb` and `mysql_stats` subroutines.
30+
- fix: improve `which` logic for better container/minimal environment support.
31+
- fix: enhance login failure reporting with detailed output.
32+
- ci: enhance Quality Gate to strictly enforce zero-warning policy on GitHub Actions tests.
33+
- ci: implement dynamic CI test environment detection by wrapping configuration extraction.
34+
- ci: refactor GitHub Actions release and prerelease workflows to support dynamic versions and checksum generation.
3235
- ci: migrate maintenance script to GitHub Actions.
36+
- refactor: update CLI metadata to use `undef` as default for string/path options.
37+
- refactor: replace non-idiomatic `eq '0'`, `ne 0`, etc., with standard truthiness checks.
38+
- refactor: replace "master"/"slave" terminology with "source"/"replica" for cultural sensitivity (#888).
3339
- chore(deps): update docker/setup-buildx-action action to v4.
3440
- chore(deps): update docker/build-push-action action to v7.
3541
- chore(deps): update docker/login-action action to v4.
@@ -40,45 +46,56 @@
4046

4147
| Metric | Current | Progress | Status |
4248
| :--- | :--- | :--- | :--- |
43-
| Total Indicators | 300+ | +0 | 🚀 |
49+
| Total Indicators | 12 | 0 | 🛡️ |
4450
| Efficiency Checks | 0 | 0 | 🛡️ |
45-
| Risk Detections | 0 | 0 | 🚀 |
46-
| Information Points | 0 | 0 | 🚀 |
51+
| Risk Detections | 2 | 0 | 🛡️ |
52+
| Information Points | 10 | 0 | 🛡️ |
53+
54+
## 🛠️ Internal Commit History
55+
56+
- ci: refactor Github release definitions with pre-releases and deliverables support (68f8d12)
57+
- ci: enforce zero-warning policy and dynamic test env (2eebcc4)
58+
- feat: release 2.8.41 final stabilization (e479ba7)
59+
- feat: release 2.8.41 final polish (e8d2751)
60+
- feat: release 2.8.41 final polish (bac36cb)
61+
- feat: release 2.8.41 (56b9dd7)
62+
- Merge pull request #41 from major/master (089a598)
63+
- Merge pull request #885 from major/renovate/docker-setup-buildx-action-4.x (d430513)
64+
- Merge pull request #886 from major/renovate/docker-build-push-action-7.x (9b7dd14)
65+
- Merge pull request #884 from major/renovate/docker-login-action-4.x (5d56ecb)
66+
- Merge pull request #894 from major/renovate/softprops-action-gh-release-3.x (9805873)
67+
- Merge pull request #882 from jasongill/master (d1f3808)
68+
- Merge pull request #895 from jmrenouard/master (2feb466)
69+
- Merge pull request #40 from major/master (10fcd37)
70+
- Merge branch 'master' into master (c13bb0b)
71+
- feat: release 2.8.40 (21d5873)
72+
- perltidy mysqltuner.pl (5653056)
73+
- chore(deps): update all non-major dependencies to v20.5.0 (#893) (290b646)
74+
- chore(deps): update dependency lodash to v4.18.1 [security] (#892) (c01e968)
75+
- chore: add automerge to Renovate config (633edcc)
76+
- Add CodeQL analysis workflow configuration (43a57c9)
77+
- Merge pull request #35 from C0RD/master (9474c70)
78+
- chore(deps): update all non-major dependencies to v20.5.0 (#893) (4520d11)
79+
- chore(deps): update softprops/action-gh-release action to v3 (75e9cee)
80+
- chore(deps): update dependency lodash to v4.18.1 [security] (#892) (e77d43c)
81+
- chore: add automerge to Renovate config (0470fb7)
82+
- Merge pull request #38 from jmrenouard/dependabot/npm_and_yarn/npm_and_yarn-b22b4dc46b (69caecf)
83+
- Merge pull request #39 from major/master (54dbffd)
84+
- chore(deps-dev): bump the npm_and_yarn group across 1 directory with 2 updates (955284a)
85+
- chore(deps): update docker/build-push-action action to v7 (a5a6234)
86+
- chore(deps): update docker/setup-buildx-action action to v4 (830bbc2)
87+
- chore(deps): update docker/login-action action to v4 (2ca8b8d)
88+
- Change default update check to disabled (938db61)
89+
- Remove r modifier from regex for compatability with older Perl versions (d6f7f97)
90+
- chore: bump version to 2.8.41 (3e54167)
91+
- Merge pull request #879 from jmrenouard/master (9b8617f)
4792

4893
## ⚙️ Technical Evolutions
4994

50-
### 🛠️ Internal Commit History
51-
- Merge pull request #41 from major/master
52-
- feat: implement idiomatic Perl Boolean practices across the project (#34)
53-
- refactor: replace "master"/"slave" terminology with "source"/"replica" for cultural sensitivity (#888)
54-
- fix: allow --updateversion to work on hosts without mysql/mariadb installed (#36)
55-
- fix: skip local SSL certificate warnings if they are in an inaccessible datadir (#33)
56-
- fix: correct false positives in check_removed_innodb_variables (#32)
57-
- fix: improve join_buffer_size recommendation formatting in Variables to Adjust (#881)
58-
- fix: suppress MySQL client warning regarding 'DISABLED' boolean value for SSL (#887)
59-
- fix: correctly handle --defaults-file and --defaults-extra-file without dropping options (#605)
60-
- fix: restore Debian maintenance account automatic login by using idiomatic boolean checks (#896)
61-
- fix: include tmp_table_size in per-thread memory calculation (#864)
62-
- fix: add retry mechanism for initial SELECT VERSION() query (#782)
63-
- fix: prevent AUTO_INCREMENT capacity false positives for empty tables (#37)
64-
- fix: refactor InnoDB Redo Log Capacity logic to be workload-based and avoid false positives (#714, #737, #777)
65-
- fix: add guards against division by zero in calculations for improved stability (#435)
66-
- feat: add recommendation for table_open_cache_instances based on CPU cores (#480)
67-
- feat: improve syslog and systemd journal detection for error logs (#440)
68-
- feat: initialize $mysqllogin to avoid uninitialized value warnings (#490)
69-
- fix: add truthiness guards to mysql_innodb and mysql_stats subroutines
70-
- fix: improve 'which' logic for better container/minimal environment support
71-
- fix: enhance login failure reporting with detailed output
72-
- fix: wrap template loading in get_template_model() to avoid warnings during require
73-
- fix: Restore compatibility with older Perl versions
74-
- chore: automated project maintenance and cleanup (extracted RULES.md, MEMORY_DB.md, TESTS.md)
75-
- ci: migrate maintenance script to GitHub Actions
76-
- chore(deps): update docker/setup-buildx-action action to v4
77-
- chore(deps): update docker/build-push-action action to v7
78-
- chore(deps): update docker/login-action action to v4
79-
- chore(deps): update softprops/action-gh-release action to v3
95+
*Internal logic hardening (no interface or diagnostic changes).*
8096

8197
## ✅ Laboratory Verification Results
8298

8399
- [x] Automated TDD suite passed.
84100
- [x] Multi-DB version laboratory execution validated.
101+
- [x] Performance indicator delta analysis completed.

0 commit comments

Comments
 (0)