From 053e2a9b686a6e045311a4fc3722d158f29f1efb Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Sun, 16 Aug 2026 00:00:36 +0300 Subject: [PATCH] ci: move workflows to Node 24 actions Issue: #145 User-Visible: no --- .github/workflows/announce.yml | 2 +- .github/workflows/mutation-gate.yml | 6 ++-- .github/workflows/performance.yml | 8 ++--- .github/workflows/process.yml | 6 ++-- .github/workflows/publish-prerelease.yml | 10 +++--- .github/workflows/release-zip.yml | 2 +- .github/workflows/release.yml | 14 ++++---- .github/workflows/validate.yml | 42 ++++++++++++------------ 8 files changed, 45 insertions(+), 45 deletions(-) diff --git a/.github/workflows/announce.yml b/.github/workflows/announce.yml index 7b7bdd7c..66c6f39d 100644 --- a/.github/workflows/announce.yml +++ b/.github/workflows/announce.yml @@ -41,7 +41,7 @@ jobs: steps: - name: Check out release notes for a reusable call if: ${{ inputs.reusable == true }} - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: ref: ${{ inputs.ref }} - name: Send to Telegram diff --git a/.github/workflows/mutation-gate.yml b/.github/workflows/mutation-gate.yml index 26491f73..b8c40c35 100644 --- a/.github/workflows/mutation-gate.yml +++ b/.github/workflows/mutation-gate.yml @@ -31,12 +31,12 @@ jobs: # нормально: гейт предрелизный. Час — потолок против зависшего Chromium. timeout-minutes: 60 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: ref: dev fetch-depth: 0 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: 22 cache: npm @@ -45,7 +45,7 @@ jobs: - name: Кэш браузеров Playwright id: pw - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.cache/ms-playwright key: playwright-${{ runner.os }}-${{ hashFiles('package-lock.json') }} diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index 21a05acc..ee7d3a6b 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -30,7 +30,7 @@ jobs: timeout-minutes: 60 steps: - name: Check out candidate - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: path: candidate fetch-depth: 2 @@ -116,12 +116,12 @@ jobs: echo "Comparison base: $sha ($source)" >> "$GITHUB_STEP_SUMMARY" - name: Check out base SHA - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: ref: ${{ steps.base.outputs.sha }} path: baseline - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: 22 cache: npm @@ -172,7 +172,7 @@ jobs: - name: Upload full performance reports if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: full-performance path: artifacts/performance diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml index 274aaa59..dee8d2c4 100644 --- a/.github/workflows/process.yml +++ b/.github/workflows/process.yml @@ -131,7 +131,7 @@ jobs: # Время — единственный настоящий ограничитель зациклившегося прогона. timeout-minutes: 45 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: fetch-depth: 0 ref: dev @@ -141,7 +141,7 @@ jobs: # кэша, платились из бюджета 45 минут и из лимитов подписки, а ходы модели # тратились на работу инфраструктуры. В validate.yml кэш стоит на всех # тяжёлых job, здесь его не было. - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: 22 cache: npm @@ -174,7 +174,7 @@ jobs: # но когда нужен — качать его заново дороже, чем держать в кэше. - name: Кэш браузеров Playwright id: pw - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.cache/ms-playwright key: playwright-${{ runner.os }}-${{ hashFiles('package-lock.json') }} diff --git a/.github/workflows/publish-prerelease.yml b/.github/workflows/publish-prerelease.yml index 9e5d7140..e2ae9382 100644 --- a/.github/workflows/publish-prerelease.yml +++ b/.github/workflows/publish-prerelease.yml @@ -24,11 +24,11 @@ jobs: sha: ${{ steps.candidate.outputs.sha }} tag: ${{ steps.candidate.outputs.tag }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: ref: ${{ github.sha }} fetch-depth: 0 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: { node-version: 22 } - name: Pin the current dev candidate id: candidate @@ -67,11 +67,11 @@ jobs: url: ${{ steps.verify.outputs.url }} newly_published: ${{ steps.release.outputs.newly_published }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: ref: ${{ needs.gate.outputs.sha }} fetch-depth: 0 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: { node-version: 22 } - name: Build and verify both release assets before publication env: @@ -173,7 +173,7 @@ jobs: printf '### Published %s\n\n- exact SHA: `%s`\n- [GitHub prerelease](%s)\n- assets: `houseplan-card.js`, `houseplan.zip`\n' \ "$TAG" "$SHA" "$URL" >> "$GITHUB_STEP_SUMMARY" - name: Verify HACS prerelease discovery order - uses: actions/github-script@v7 + uses: actions/github-script@v9 env: EXPECTED_TAG: ${{ needs.gate.outputs.tag }} with: diff --git a/.github/workflows/release-zip.yml b/.github/workflows/release-zip.yml index 6669fcad..c1547ecd 100644 --- a/.github/workflows/release-zip.yml +++ b/.github/workflows/release-zip.yml @@ -27,7 +27,7 @@ jobs: EVENT_TAG: ${{ github.event.release.tag_name }} INPUT_TAG: ${{ github.event.inputs.tag }} run: echo "tag=${EVENT_TAG:-$INPUT_TAG}" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: ref: ${{ steps.tag.outputs.tag }} - name: Build houseplan.zip (contents of custom_components/houseplan at zip root) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 52f688a7..18e0be13 100755 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,11 +16,11 @@ jobs: gate: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: ref: ${{ github.event.release.tag_name }} fetch-depth: 0 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: { node-version: 22 } - name: Require a green Validate for this exact commit env: @@ -47,10 +47,10 @@ jobs: needs: gate runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: ref: ${{ github.event.release.tag_name }} - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: { node-version: 22 } - run: npm ci && npm run build - name: Verify compositor frame continuity for a stable release @@ -61,13 +61,13 @@ jobs: npm run continuity:screencast - name: Upload failed continuity frames if: ${{ failure() && !github.event.release.prerelease }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: continuity-screencast path: artifacts/continuity-screencast - run: cp dist/houseplan-card.js custom_components/houseplan/frontend/ - name: Attach card to release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 with: files: dist/houseplan-card.js hacs-discovery: @@ -80,7 +80,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Verify the published tag is the prerelease HACS will discover - uses: actions/github-script@v7 + uses: actions/github-script@v9 with: script: | const releases = await github.paginate(github.rest.repos.listReleases, { diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 83f8f9cb..e00d309f 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -18,9 +18,9 @@ jobs: provenance: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: { fetch-depth: 0 } - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: { node-version: 22 } - name: Validate commit trailers and hook mode env: @@ -40,9 +40,9 @@ jobs: process-gate: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: { fetch-depth: 0 } - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: { node-version: 22 } - name: Process gate env: @@ -71,7 +71,7 @@ jobs: backend: ${{ steps.classify.outputs.backend }} integration: ${{ steps.classify.outputs.integration }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: { fetch-depth: 0 } - id: classify env: @@ -110,7 +110,7 @@ jobs: if: needs.changes.outputs.integration == 'true' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: HACS validation uses: hacs/action@main with: @@ -121,7 +121,7 @@ jobs: if: needs.changes.outputs.integration == 'true' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Hassfest validation uses: home-assistant/actions/hassfest@master @@ -130,8 +130,8 @@ jobs: if: needs.changes.outputs.frontend == 'true' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: 22 cache: npm @@ -152,8 +152,8 @@ jobs: needs: frontend runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: 22 cache: npm @@ -179,7 +179,7 @@ jobs: exit $fail - name: Upload smoke logs if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: smoke-logs path: /tmp/smoke-logs @@ -190,8 +190,8 @@ jobs: needs: frontend runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: 22 cache: npm @@ -212,7 +212,7 @@ jobs: fi - name: Upload golden candidates/diffs if: failure() || steps.golden.outputs.has_baselines == 'false' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: golden-images path: artifacts/golden @@ -224,8 +224,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: 22 cache: npm @@ -242,7 +242,7 @@ jobs: npm run benchmark:compare -- --absolute-only --budgets=demo/performance/budgets-glow-smoke.json --candidate=artifacts/performance-smoke/candidate.json --output=artifacts/performance-smoke/comparison.json - name: Upload performance smoke report if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: performance-smoke path: artifacts/performance-smoke @@ -252,12 +252,12 @@ jobs: if: needs.changes.outputs.backend == 'true' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 # Browser fixtures are generated by their real ESM factories and then # validated through the Python CONFIG_SCHEMA/LAYOUT_SCHEMA in the same test. - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: { node-version: 22 } - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v7 with: { python-version: "3.13" } - run: pip install pytest voluptuous pytest-homeassistant-custom-component home-assistant-frontend - name: Backend unit tests (pure + HA harness)