From 6ac17c15eb516d4315ac73ee35a58191e51f2d75 Mon Sep 17 00:00:00 2001 From: Gabriel Edera Date: Thu, 20 Aug 2026 11:10:07 -0300 Subject: [PATCH 1/6] ci(main): timeout-minutes 15 Un job sin timeout usa el default de Actions: 6 HORAS. Cinco jobs colgados asi agotaron los minutos de la org el 2026-08-19 (361 min cada uno, contra una mediana de 1,6). Este valor sale de lo medido, no de una intuicion. Part of sequre/ai_knowledge#1023 --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e268ae6..bfaeb95 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,6 +10,7 @@ on: jobs: build: runs-on: ubuntu-latest + timeout-minutes: 15 name: Ruby ${{ matrix.ruby }} strategy: matrix: From a5f0c5f736e49c9196857fb5ed3c8ab87781448a Mon Sep 17 00:00:00 2001 From: Gabriel Edera Date: Thu, 20 Aug 2026 11:10:08 -0300 Subject: [PATCH 2/6] ci(release): timeout-minutes 30 Un job sin timeout usa el default de Actions: 6 HORAS. Cinco jobs colgados asi agotaron los minutos de la org el 2026-08-19 (361 min cada uno, contra una mediana de 1,6). Este valor sale de lo medido, no de una intuicion. Part of sequre/ai_knowledge#1023 --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ceddf1a..812d03c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,6 +9,7 @@ jobs: build: name: Build + Publish runs-on: ubuntu-latest + timeout-minutes: 30 permissions: contents: read packages: write From 5fe0eadf607cfbf19dd8b8945e75b57195018455 Mon Sep 17 00:00:00 2001 From: Gabriel Edera Date: Thu, 20 Aug 2026 11:21:27 -0300 Subject: [PATCH 3/6] =?UTF-8?q?ci:=20los=20tests=20salen=20de=20push/PR=20?= =?UTF-8?q?=E2=80=94=20se=20validan=20en=20local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El job que corre tests es lo mas caro del CI y la org agoto los minutos de Actions (plan free, 2.000/mes, limite de gasto en $0: GitHub bloquea en vez de cobrar). Los tests pasan a ser un gate LOCAL antes de mergear, con la evidencia en el cuerpo del PR — la regla esta en el playbook, Fase 5. build, vet y lint NO se tocan: cuestan segundos y cazan cosas reales. El paso de tests queda disponible a mano con workflow_dispatch. Part of sequre/ai_knowledge#1023 --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bfaeb95..b049468 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,8 @@ name: Ruby on: + # Habilitado para correr los tests A MANO — ver el `if:` del paso. + workflow_dispatch: push: branches: - main @@ -26,6 +28,7 @@ jobs: with: ruby-version: ${{ matrix.ruby }} bundler-cache: true + if: github.event_name == 'workflow_dispatch' - name: Run unit tests run: bundle exec rspec --tag ~type:integration - name: Run linter From fbe56df0948952ad80bd1127dc8e5f278f4fd4cc Mon Sep 17 00:00:00 2001 From: Gabriel Edera Date: Thu, 20 Aug 2026 11:23:15 -0300 Subject: [PATCH 4/6] =?UTF-8?q?ci:=20los=20tests=20salen=20de=20push/PR=20?= =?UTF-8?q?=E2=80=94=20se=20validan=20en=20local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El job que corre tests es lo mas caro del CI y la org agoto los minutos de Actions (plan free, 2.000/mes, limite de gasto en $0: bloquea en vez de cobrar). Los tests pasan a ser un gate LOCAL antes de mergear, con la evidencia en el PR — la regla esta en el playbook, Fase 5. build, vet y lint NO se tocan: cuestan segundos y cazan cosas reales. El paso de tests queda disponible a mano con workflow_dispatch. Part of sequre/ai_knowledge#1023 --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b049468..93054d2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,8 +28,8 @@ jobs: with: ruby-version: ${{ matrix.ruby }} bundler-cache: true - if: github.event_name == 'workflow_dispatch' - name: Run unit tests + if: github.event_name == 'workflow_dispatch' run: bundle exec rspec --tag ~type:integration - name: Run linter run: bundle exec rubocop From 311b0a3facc2ba41d39e9f07db296d16d78bf5b5 Mon Sep 17 00:00:00 2001 From: Gabriel Edera Date: Thu, 20 Aug 2026 11:35:46 -0300 Subject: [PATCH 5/6] =?UTF-8?q?ci:=20sacar=20el=20paso=20que=20corre=20tes?= =?UTF-8?q?ts=20=E2=80=94=20no=20corren=20mas=20en=20Actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se elimina, no se gatea: el paso seguia en git. Los tests se validan en local antes de mergear, con la evidencia en el PR (playbook, Fase 5). build, vet, lint y cross-compile NO se tocan. Part of sequre/ai_knowledge#1023 --- .github/workflows/main.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 93054d2..b5a4067 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,8 +1,6 @@ name: Ruby on: - # Habilitado para correr los tests A MANO — ver el `if:` del paso. - workflow_dispatch: push: branches: - main @@ -28,8 +26,5 @@ jobs: with: ruby-version: ${{ matrix.ruby }} bundler-cache: true - - name: Run unit tests - if: github.event_name == 'workflow_dispatch' - run: bundle exec rspec --tag ~type:integration - name: Run linter run: bundle exec rubocop From 97f7d5958ae6ab9fbc61197012d05f2f6803f812 Mon Sep 17 00:00:00 2001 From: Gabriel Edera Date: Thu, 20 Aug 2026 11:49:21 -0300 Subject: [PATCH 6/6] =?UTF-8?q?ci:=20revertir=20la=20salida=20de=20rspec?= =?UTF-8?q?=20=E2=80=94=20este=20repo=20es=20PUBLICO=20y=20sus=20Actions?= =?UTF-8?q?=20son=20gratis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Queda solo el timeout-minutes. Sacar los tests de Actions se hizo para no quemar los 2.000 min/mes del plan free, y eso aplica a repos PRIVADOS: en un repo publico GitHub da minutos ilimitados. Confirmado por observacion: el CI de este repo siguio corriendo y pasando mientras el de los 12 repos privados estaba bloqueado. Asi que sacarle rspec no ahorraba nada y le quitaba el unico gate automatico que tiene. El trade-off cambia de signo cuando el minuto es gratis. Part of sequre/ai_knowledge#1023 --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b5a4067..bfaeb95 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,5 +26,7 @@ jobs: with: ruby-version: ${{ matrix.ruby }} bundler-cache: true + - name: Run unit tests + run: bundle exec rspec --tag ~type:integration - name: Run linter run: bundle exec rubocop