diff --git a/.github/workflows/apps_automated_android.yml b/.github/workflows/apps_automated_android.yml index d8483b4448..ff4a3eb088 100644 --- a/.github/workflows/apps_automated_android.yml +++ b/.github/workflows/apps_automated_android.yml @@ -31,7 +31,7 @@ jobs: node-version: 23.5.0 - name: Derive appropriate SHAs for base and head for `nx affected` commands - uses: nrwl/nx-set-shas@826660b82addbef3abff5fa871492ebad618c9e1 # v4.3.3 + uses: nrwl/nx-set-shas@afb73a62d26e41464e9254689e1fd6122ee683c1 # v5.0.1 with: main-branch-name: 'main' @@ -65,7 +65,7 @@ jobs: sudo udevadm trigger --name-match=kvm - name: Run tests on Android Emulator - uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b # v2.35.0 + uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # v2.37.0 with: api-level: 35 arch: x86_64 diff --git a/.github/workflows/apps_automated_ios.yml b/.github/workflows/apps_automated_ios.yml index 7fcce34749..7dfb51f331 100644 --- a/.github/workflows/apps_automated_ios.yml +++ b/.github/workflows/apps_automated_ios.yml @@ -34,7 +34,7 @@ jobs: node-version: 23.5.0 - name: Derive appropriate SHAs for base and head for `nx affected` commands - uses: nrwl/nx-set-shas@826660b82addbef3abff5fa871492ebad618c9e1 # v4.3.3 + uses: nrwl/nx-set-shas@afb73a62d26e41464e9254689e1fd6122ee683c1 # v5.0.1 with: main-branch-name: 'main' @@ -52,7 +52,7 @@ jobs: run: npx nx run-many --target=test --configuration=ci --projects=core - name: Start iOS Simulator - uses: futureware-tech/simulator-action@dab10d813144ef59b48d401cd95da151222ef8cd # v4 + uses: futureware-tech/simulator-action@e89aa8f93d3aec35083ff49d2854d07f7186f7f5 # v5 with: model: 'iPhone 16 Pro' diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index d69dfb2474..6b3ebd28cc 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -19,4 +19,4 @@ jobs: - name: 'Checkout Repository' uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: 'Dependency Review' - uses: actions/dependency-review-action@05fe4576374b728f0c523d6a13d64c25081e0803 # v4.8.3 \ No newline at end of file + uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0 \ No newline at end of file diff --git a/.github/workflows/npm_release_tns_core.yml b/.github/workflows/npm_release_tns_core.yml index b0c6ab3bbe..c4f405ee63 100644 --- a/.github/workflows/npm_release_tns_core.yml +++ b/.github/workflows/npm_release_tns_core.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/npm_release_types.yml b/.github/workflows/npm_release_types.yml index d99b1ad1cf..4aa5c151e5 100644 --- a/.github/workflows/npm_release_types.yml +++ b/.github/workflows/npm_release_types.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/npm_release_webpack.yml b/.github/workflows/npm_release_webpack.yml index 3df7b98875..8d78e4e624 100644 --- a/.github/workflows/npm_release_webpack.yml +++ b/.github/workflows/npm_release_webpack.yml @@ -18,7 +18,7 @@ jobs: steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/secure_nx_release.yml b/.github/workflows/secure_nx_release.yml index 643e3ff14b..63bf00c3e9 100644 --- a/.github/workflows/secure_nx_release.yml +++ b/.github/workflows/secure_nx_release.yml @@ -45,10 +45,11 @@ jobs: env: # Optional: provide Nx Cloud token if used in this repo NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} + NEXT_PRERELEASE_PROJECT_ALLOWLIST: core,webpack5 steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit @@ -124,8 +125,8 @@ jobs: fi fi - # Only consider libs under packages/* and exclude items configured as non-releaseable. - affected_json=$(npx nx show projects --affected --base "$base" --head "$head" --type lib --projects "packages/*" --exclude "ui-mobile-base,types-minimal,winter-tc,types,types-ios,types-android" --json) + # Only consider main-branch prerelease libraries allowed for automatic next publishes. + affected_json=$(npx nx show projects --affected --base "$base" --head "$head" --type lib --projects "$NEXT_PRERELEASE_PROJECT_ALLOWLIST" --json) affected_list=$(printf '%s' "$affected_json" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const a=JSON.parse(s||"[]");process.stdout.write(a.join(","));});') affected_count=$(printf '%s' "$affected_json" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const a=JSON.parse(s||"[]");process.stdout.write(String(a.length));});') @@ -337,7 +338,6 @@ jobs: - name: nx release publish (token, dispatch) if: ${{ steps.ctx.outputs.mode == 'dispatch' && steps.ctx.outputs.dry_run != 'true' && vars.USE_NPM_TOKEN == 'true' }} - shell: bash env: NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} NPM_CONFIG_PROVENANCE: true @@ -353,7 +353,6 @@ jobs: - name: nx release publish (token, dispatch dry-run) if: ${{ steps.ctx.outputs.mode == 'dispatch' && inputs.dry-run && vars.USE_NPM_TOKEN == 'true' }} - shell: bash env: NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} NPM_CONFIG_PROVENANCE: true @@ -403,9 +402,23 @@ jobs: - name: Summary if: always() run: | + mode="${{ steps.ctx.outputs.mode }}" + echo "Nx Release completed." - echo "- mode: ${{ steps.ctx.outputs.mode }}" + echo "- mode: ${mode}" echo "- dist-tag: ${{ steps.ctx.outputs.mode == 'tag' && steps.taginfo.outputs.dist_tag || steps.ctx.outputs.dist_tag }}" echo "- scope: '${{ steps.ctx.outputs.scope }}'" + echo "- next-prerelease-allowlist: ${NEXT_PRERELEASE_PROJECT_ALLOWLIST}" + if [[ "$mode" == "main" ]]; then + echo "- projects: ${{ steps.affected.outputs.projects }}" + elif [[ "$mode" == "dispatch" ]]; then + if [[ -n "${{ steps.ctx.outputs.scope }}" ]]; then + echo "- projects: ${{ steps.ctx.outputs.scope }}" + else + echo "- projects: all configured release projects" + fi + else + echo "- project: ${{ steps.taginfo.outputs.project }}" + fi echo "- dry-run: ${{ steps.ctx.outputs.dry_run }}" echo "- use-token: ${{ vars.USE_NPM_TOKEN == 'true' }}" diff --git a/apps/automated/src/ui/layouts/flexbox-layout-tests.ts b/apps/automated/src/ui/layouts/flexbox-layout-tests.ts index 3bbe457cdc..5233cfd147 100644 --- a/apps/automated/src/ui/layouts/flexbox-layout-tests.ts +++ b/apps/automated/src/ui/layouts/flexbox-layout-tests.ts @@ -1,4 +1,4 @@ -import { FlexboxLayout, Button, View, unsetValue, Length, PercentLength, Label, Builder } from '@nativescript/core'; +import { FlexboxLayout, Button, View, unsetValue, Length, PercentLength, Label, Builder, isIOS } from '@nativescript/core'; export namespace FlexDirection { export const ROW: 'row' = 'row'; @@ -1746,3 +1746,45 @@ export const testFlexboxLayout_does_not_crash_with_proxy_view_container = test(a // Omit testDivider_directionRow_verticalBeginning // Omit divider test family, we don't draw dividers + +let activity_liquidglass_flexbox_layout = () => + getViews( + ` + + + `, + ); + +export const testLiquidGlassFlexboxLayout = isIOS + ? test(activity_liquidglass_flexbox_layout, noop, ({ flexbox, text1, text2, text3 }) => { + isTopAlignedWith(text1, flexbox); + isLeftAlignedWith(text1, flexbox); + isRightOf(text2, text1); + isTopAlignedWith(text2, flexbox); + isRightOf(text3, text2); + isTopAlignedWith(text3, flexbox); + + equal(width(flexbox), width(text1) + width(text2) + width(text3)); + // Layout helpers report device pixels, so fixed XML DIP sizes must be converted too. + closeEnough(height(flexbox), dipToDp(300)); + }) + : undefined; + +export const testLiquidGlassViews_do_not_crash_when_updating_iosGlassEffect = isIOS + ? test(activity_liquidglass_flexbox_layout, noop, ({ root, text1, text2 }) => { + const liquidGlass = text1 as unknown as View; + const liquidGlassContainer = text2 as unknown as View; + + TKUnit.assertTrue(liquidGlass.nativeViewProtected instanceof UIVisualEffectView, 'LiquidGlass should create a UIVisualEffectView host.'); + TKUnit.assertTrue(liquidGlassContainer.nativeViewProtected instanceof UIVisualEffectView, 'LiquidGlassContainer should create a UIVisualEffectView host.'); + + liquidGlass.iosGlassEffect = 'regular'; + liquidGlassContainer.iosGlassEffect = { variant: 'clear', spacing: 12 }; + liquidGlass.iosGlassEffect = 'none'; + liquidGlassContainer.iosGlassEffect = 'none'; + + waitUntilTestElementLayoutIsValid(root); + TKUnit.assertTrue(root.isLoaded, 'Liquid glass view tree should remain loaded after glass effect updates.'); + }) + : undefined; diff --git a/apps/toolbox/src/pages/glass-effects.xml b/apps/toolbox/src/pages/glass-effects.xml index 58601674af..c457ccf70b 100644 --- a/apps/toolbox/src/pages/glass-effects.xml +++ b/apps/toolbox/src/pages/glass-effects.xml @@ -15,13 +15,13 @@