diff --git a/.github/workflows/04.1.agentic_v2_publish.yml b/.github/workflows/04.1.agentic_v2_publish.yml index 69edbeac..956a8d17 100644 --- a/.github/workflows/04.1.agentic_v2_publish.yml +++ b/.github/workflows/04.1.agentic_v2_publish.yml @@ -124,37 +124,49 @@ jobs: python -m src.safety_readme - name: Commit and Push V2 Elite Updates + env: + PYTHONPATH: ${{ github.workspace }} run: | git config --global user.name "Nubenetes Bot" git config --global user.email "bot@nubenetes.com" git add -A if git diff --staged --quiet; then echo "No automated changes to commit." - else - git commit -m "feat: sync V2 elite curated edition and README metrics [skip ci]" - # Pull, rebase, and push with automatic resolution of README.md conflicts - for i in {1..5}; do - if git pull origin develop --rebase; then - if git push origin develop; then - exit 0 - fi - else - echo "Rebase conflict detected, attempting self-healing..." - # Discard local conflicting changes to README.md and accept remote - git checkout --ours README.md || git checkout --theirs README.md - git add README.md - # Continue rebase - GIT_EDITOR=true git rebase --continue || { git rebase --abort; git pull origin develop; } - # Re-run README sync to update metrics with remote state incorporated - python -m src.readme_updater - python -m src.safety_readme - git add README.md - git commit --amend --no-edit - fi - sleep 5 - done - git push origin develop + exit 0 fi + git commit -m "feat: sync V2 elite curated edition and README metrics [skip ci]" + OUR=$(git rev-parse HEAD) + # Deterministic publish loop (replaces the fragile rebase + --ours/--theirs + # self-healing that could hang on a conflict and discard the bot's metrics). + # The render is authoritative for its generated surface, so each attempt: + # 1. hard-resets to the freshest remote tip (no conflict possible), + # 2. overlays our generated outputs verbatim (docs/, v2-docs/, inventory, + # news_digest) — source configs in data/ are left untouched, + # 3. regenerates README.md (a pure function of the inventory) on top, + # 4. commits and pushes; on rejection it retries from the new tip. + GENERATED="docs v2-docs data/inventory.yaml data/inventory.sql data/news_digest.json" + for i in {1..5}; do + echo "Publish attempt $i/5..." + git fetch origin develop + git reset --hard origin/develop + git checkout "$OUR" -- $GENERATED + python -m src.readme_updater + python -m src.safety_readme + git add -A + if git diff --staged --quiet; then + echo "Remote already matches this render. Nothing to push." + exit 0 + fi + git commit -m "feat: sync V2 elite curated edition and README metrics [skip ci]" + if git push origin develop; then + echo "Push succeeded on attempt $i." + exit 0 + fi + echo "Attempt $i rejected — remote advanced, retrying from fresh tip..." + sleep $((i * 3)) + done + echo "::error::V2 publish push failed after 5 attempts (persistent write contention on develop)." + exit 1 - name: Create or Update Promotion PR to Master env: diff --git a/CHANGELOG.md b/CHANGELOG.md index c4ea8273..ad4691bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [[2.9.14]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.9.14) - 2026-06-19 + +### Changed +- **Deterministic V2 Publisher Push (04.1)**: Replaced the fragile rebase + `git checkout --ours/--theirs README.md` self-healing in `04.1.agentic_v2_publish.yml` — which could hang on a non-README conflict and silently discard the bot's README metrics — with the same deterministic model now used by `05.1`. The render is authoritative for its generated surface, so each attempt hard-resets to the freshest `origin/develop` tip, overlays the generated outputs verbatim (`docs/`, `v2-docs/`, `data/inventory.yaml`, `data/inventory.sql`, `data/news_digest.json` — source configs like `link_rules.yaml`/`special_assets.yaml` are deliberately left untouched), regenerates `README.md` on top, then commits and pushes with a 5-attempt retry. This never hangs on a conflict and never loses data. Also pinned `PYTHONPATH` on the step so the in-loop `readme_updater`/`safety_readme` calls always resolve `src`. + ## [[2.9.13]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.9.13) - 2026-06-19 ### Fixed diff --git a/README.md b/README.md index a50196ff..f249fb14 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ Additionally, as of May 2026, Nubenetes has reached the **Platinum Operational T | :--- | :--- | | **Total Technical Resources (Links)** | **18647+** | | **Specialized MD Pages** | **162** | -| **Total Commits** | **6189+** | +| **Total Commits** | **6197+** | | **Primary AI Engine** | **Google Gemini (Agentic)** | @@ -180,7 +180,7 @@ The growth of Nubenetes reflects the acceleration of the Cloud Native ecosystem. | 6 | 2023 | 30 | 123 | Maintenance & Refinement | | 7 | 2024 | 53 | 218 | Curation Strategy Pivot | | 8 | 2025 | 5 | 20 | Stability & Research Phase | -| 9 | 2026 | 2630 | 10,861 | **Agentic AI Surge** (May 2026 Inception) | +| 9 | 2026 | 2638 | 10,894 | **Agentic AI Surge** (May 2026 Inception) | @@ -196,8 +196,8 @@ xychart-beta title "Nubenetes Annual Growth Metrics (2018–2026)" x-axis ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026"] y-axis "Volume (Commits / Estimated New Refs)" 0 --> 11000 - bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 10861] - bar [350, 142, 2046, 531, 402, 30, 53, 5, 2630] + bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 10894] + bar [350, 142, 2046, 531, 402, 30, 53, 5, 2638] ``` @@ -207,7 +207,7 @@ xychart-beta | :--- | :---: | :---: | :--- | | 2026-04 | 25 | 103 | Active Curation | | 2026-05 | 2101 | 8,677 | **Agentic Inception (Gemini Era)** | -| 2026-06 | 504 | 2,081 | Active Curation | +| 2026-06 | 512 | 2,114 | Active Curation | ### 2.4. Content Distribution and Semantic Clustering