Skip to content

Commit aa54efa

Browse files
perf(release): optimize Gate4 polling and bump to 5.1.2 (#49)
* perf(release): optimize gate4 polling and bump version to 5.1.2 * docs(release): align gate4 retry defaults and env docs --------- Co-authored-by: GitHub Copilot Agent <github-actions[bot]@users.noreply.github.com>
1 parent f12711d commit aa54efa

8 files changed

Lines changed: 50 additions & 10 deletions

File tree

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
66
</PropertyGroup>
77
<PropertyGroup>
8-
<RepoVersion>5.1.1</RepoVersion>
8+
<RepoVersion>5.1.2</RepoVersion>
99
</PropertyGroup>
1010
</Project>

docs/021_USAGE_NUGET.MD

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ Relevante Inputs:
5656
- `REQUIRE_FLATCONTAINER`: aktiviert/deaktiviert Flatcontainer als Pflichtcheck (`1`/`0`, Default `1`).
5757

5858
Release-Gate-4 (post-publish) nutzt eigene Defaults über den Wrapper:
59-
- `SVT_POSTPUBLISH_RETRY_COUNT` (Default `59`)
59+
- `SVT_POSTPUBLISH_RETRY_SCHEDULE_SECONDS` (Default `2,3,5,8,13,21,34,55,89,89,89`)
60+
- `SVT_POSTPUBLISH_RETRY_COUNT` (Default: Anzahl Schedule-Elemente, aktuell `11`; optional explizit überschreibbar)
6061
- `SVT_POSTPUBLISH_RETRY_SLEEP_SECONDS` (Default `10`)
6162
- Blocking-Scope im Release:
6263
- `REQUIRE_SEARCH=0`

docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ Die aktive Trusted-Publishing-Policy ist an folgende Identität gebunden:
2020
- `REQUIRE_REGISTRATION=1`
2121
- `REQUIRE_SEARCH=0` (Search ist aus dem blocking Gate entkoppelt).
2222
- Default-Wartefenster für Gate 4:
23-
- `SVT_POSTPUBLISH_RETRY_COUNT=59`
23+
- `SVT_POSTPUBLISH_RETRY_SCHEDULE_SECONDS=2,3,5,8,13,21,34,55,89,89,89`
24+
- `SVT_POSTPUBLISH_RETRY_COUNT=11` (dynamisch aus Schedule-Länge, sofern nicht explizit gesetzt)
2425
- `SVT_POSTPUBLISH_RETRY_SLEEP_SECONDS=10`
25-
- entspricht deterministisch einem Retry-Sleep-Budget von bis zu 590s (9m50s) zuzüglich HTTP-Timeout-Anteilen pro Versuch.
26+
- entspricht deterministisch einem Retry-Sleep-Budget von bis zu 408s (6m48s) zuzüglich HTTP-Timeout-Anteilen pro Versuch.
2627
- Bei Incident-Diagnose kann das Fenster über die beiden Variablen erhöht werden, ohne Workflow-Jobnamen oder Required Contexts zu ändern.
2728

2829
## 5. Entkoppelte Online-Konvergenz (Async)

docs/versioning/002_HISTORY_VERSIONS.MD

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ Heuristik fuer die Rueckwirkungs-Zuordnung:
88
- `docs|test|ci|chore|tooling|refactor|fix` => Patch
99

1010
Aktueller Entwicklungsstand:
11-
- Aktuelle Entwicklungslinie enthält `5.x` (aktuell veroeffentlichtes Tag: `v5.1.0`; Details in `docs/versioning/003_CHANGELOG_RELEASES.MD`).
11+
- Aktuelle Entwicklungslinie enthält `5.x` (aktuell veroeffentlichtes Tag: `v5.1.1`; Details in `docs/versioning/003_CHANGELOG_RELEASES.MD`).
1212

1313
| Version | Kurzbeschreibung | Commit | Keyword |
1414
|---|---|---|---|
15+
| `5.1.2` | Optimize Gate4 NuGet post-publish polling with adaptive retry schedule and bump patch version | pending merge commit | patch |
1516
| `5.1.1` | Dependabot security-only mode und fail-closed Guards fuer secret-pflichtige Workflows | [d0ad8ec](https://github.com/tomtastisch/FileClassifier/commit/d0ad8ec) | patch |
1617
| `5.1.0` | Security/Governance hardening wave: pinned actions, dependency review, labeler fixes, root assurance index | [e2a4a42](https://github.com/tomtastisch/FileClassifier/commit/e2a4a42) | minor |
1718
| `5.0.0` | Finalize hashing API rename to EvidenceHashing and add optional HMAC digests | [444d027](https://github.com/tomtastisch/FileClassifier/commit/444d027) | breaking |

docs/versioning/003_CHANGELOG_RELEASES.MD

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ Alle Aenderungen werden hier technisch dokumentiert. Die Release-Version selbst
44
der Git-Tag `vX.Y.Z` (optional `-prerelease`) als SSOT.
55

66
## [Unreleased]
7+
- Changed:
8+
- NuGet Post-Publish SVT (`Gate 4`) auf adaptiven Retry-Schedule umgestellt, um die durchschnittliche Laufzeit bei unverändert fail-closed Verhalten zu senken.
9+
- Repo-/Package-Version auf `5.1.2` (Patch `Z + 1`) angehoben.
10+
- Docs/CI/Tooling:
11+
- Retry-Schedule-Defaults und neues ENV `SVT_POSTPUBLISH_RETRY_SCHEDULE_SECONDS` in `docs/021_USAGE_NUGET.MD` und `docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD` nachgezogen.
12+
13+
## [5.1.1]
714
- Added:
815
- Dependabot-Schutz fuer secret-pflichtige Workflows (`qodana`, `security-claims-evidence`) bei Dependabot-PR-Kontext.
916
- Changed:

src/FileTypeDetection/FileTypeDetectionLib.vbproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<IsPackable>true</IsPackable>
88
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
99
<PackageId>Tomtastisch.FileClassifier</PackageId>
10-
<Version>5.1.1</Version>
11-
<PackageVersion>5.1.1</PackageVersion>
10+
<Version>5.1.2</Version>
11+
<PackageVersion>5.1.2</PackageVersion>
1212
<Authors>tomtastisch</Authors>
1313
<Description>Deterministic file type and MIME detection with fail-closed archive safety checks, secure extraction primitives, and reproducible hashing evidence for .NET.</Description>
1414
<PackageTags>filetype;mime;detection;magic-bytes;sniffing;archive;zip;tar;7z;rar;zipslip;security;hashing;sha256;deterministic;dotnet;net8;net10</PackageTags>

tools/ci/release/gate4_verify_postpublish.sh

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,17 @@ set -euo pipefail
33

44
expected_version="${1:?expected version required}"
55
nupkg_path="${2:?nupkg path required}"
6-
retry_count="${SVT_POSTPUBLISH_RETRY_COUNT:-59}"
6+
default_retry_schedule_seconds="2,3,5,8,13,21,34,55,89,89,89"
7+
retry_schedule_seconds="${SVT_POSTPUBLISH_RETRY_SCHEDULE_SECONDS:-${default_retry_schedule_seconds}}"
8+
if [[ -n "${SVT_POSTPUBLISH_RETRY_COUNT:-}" ]]; then
9+
retry_count="${SVT_POSTPUBLISH_RETRY_COUNT}"
10+
else
11+
if [[ -n "${retry_schedule_seconds}" ]]; then
12+
retry_count="$(awk -F',' '{print NF}' <<<"${retry_schedule_seconds}")"
13+
else
14+
retry_count="59"
15+
fi
16+
fi
717
retry_sleep_seconds="${SVT_POSTPUBLISH_RETRY_SLEEP_SECONDS:-10}"
818

919
if [[ ! "${retry_count}" =~ ^[0-9]+$ ]]; then
@@ -14,11 +24,16 @@ if [[ ! "${retry_sleep_seconds}" =~ ^[0-9]+$ ]]; then
1424
echo "SVT_POSTPUBLISH_RETRY_SLEEP_SECONDS must be a non-negative integer (actual='${retry_sleep_seconds}')" >&2
1525
exit 1
1626
fi
27+
if [[ -n "${retry_schedule_seconds}" && ! "${retry_schedule_seconds}" =~ ^[0-9]+(,[0-9]+)*$ ]]; then
28+
echo "SVT_POSTPUBLISH_RETRY_SCHEDULE_SECONDS must be comma-separated non-negative integers (actual='${retry_schedule_seconds}')" >&2
29+
exit 1
30+
fi
1731

1832
EXPECTED_VERSION="${expected_version}" \
1933
NUPKG_PATH="${nupkg_path}" \
2034
RETRY_COUNT="${retry_count}" \
2135
RETRY_SLEEP_SECONDS="${retry_sleep_seconds}" \
36+
RETRY_SCHEDULE_SECONDS="${retry_schedule_seconds}" \
2237
REQUIRE_SEARCH=0 \
2338
REQUIRE_REGISTRATION=1 \
2439
REQUIRE_FLATCONTAINER=1 \

tools/ci/verify_nuget_release.sh

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ EXPECTED_VERSION="${EXPECTED_VERSION:-}"
1111
TIMEOUT_SECONDS="${TIMEOUT_SECONDS:-30}"
1212
RETRY_COUNT="${RETRY_COUNT:-6}"
1313
RETRY_SLEEP_SECONDS="${RETRY_SLEEP_SECONDS:-10}"
14+
RETRY_SCHEDULE_SECONDS="${RETRY_SCHEDULE_SECONDS:-}"
1415
VERIFY_ONLINE="${VERIFY_ONLINE:-1}"
1516
REQUIRE_SEARCH="${REQUIRE_SEARCH:-1}"
1617
REQUIRE_REGISTRATION="${REQUIRE_REGISTRATION:-1}"
@@ -69,9 +70,18 @@ retry_network() {
6970
if [[ "${attempt}" -ge "${RETRY_COUNT}" ]]; then
7071
fail "Network check '${name}' failed after $((RETRY_COUNT + 1)) attempts."
7172
fi
72-
info "Network check '${name}' attempt ${current_attempt}/${max_attempts} failed; retrying in ${RETRY_SLEEP_SECONDS}s."
73+
local sleep_seconds="${RETRY_SLEEP_SECONDS}"
74+
if [[ -n "${RETRY_SCHEDULE_SECONDS}" ]]; then
75+
local schedule_value
76+
schedule_value="$(awk -F',' -v idx="${current_attempt}" '{ if (idx <= NF) print $idx; else print $NF }' <<<"${RETRY_SCHEDULE_SECONDS}")"
77+
if [[ -z "${schedule_value}" || ! "${schedule_value}" =~ ^[0-9]+$ ]]; then
78+
fail "RETRY_SCHEDULE_SECONDS must contain only comma-separated non-negative integers."
79+
fi
80+
sleep_seconds="${schedule_value}"
81+
fi
82+
info "Network check '${name}' attempt ${current_attempt}/${max_attempts} failed; retrying in ${sleep_seconds}s."
7383
attempt=$((attempt + 1))
74-
sleep "${RETRY_SLEEP_SECONDS}"
84+
sleep "${sleep_seconds}"
7585
done
7686
}
7787

@@ -301,6 +311,11 @@ main() {
301311
require_cmd python3
302312
require_nonnegative_integer "RETRY_COUNT" "${RETRY_COUNT}"
303313
require_nonnegative_integer "RETRY_SLEEP_SECONDS" "${RETRY_SLEEP_SECONDS}"
314+
if [[ -n "${RETRY_SCHEDULE_SECONDS}" ]]; then
315+
if [[ ! "${RETRY_SCHEDULE_SECONDS}" =~ ^[0-9]+(,[0-9]+)*$ ]]; then
316+
fail "RETRY_SCHEDULE_SECONDS must be comma-separated non-negative integers (actual='${RETRY_SCHEDULE_SECONDS}')"
317+
fi
318+
fi
304319
require_bool_flag "REQUIRE_SEARCH" "${REQUIRE_SEARCH}"
305320
require_bool_flag "REQUIRE_REGISTRATION" "${REQUIRE_REGISTRATION}"
306321
require_bool_flag "REQUIRE_FLATCONTAINER" "${REQUIRE_FLATCONTAINER}"

0 commit comments

Comments
 (0)