diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index 580dc46d..0336c9c5 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -30,64 +30,66 @@ jobs: actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - - name: 🗑️ Free Disk Space - uses: BRAINSia/free-disk-space@7048ffbf50819342ac964ef3998a51c2564a8a75 # v2.1.3 - with: - tool-cache: false - mandb: true - android: false - dotnet: true - haskell: true - large-packages: false - docker-images: true - swap-storage: false + - parallel: + - name: 🗑️ Free Disk Space + uses: BRAINSia/free-disk-space@7048ffbf50819342ac964ef3998a51c2564a8a75 # v2.1.3 + with: + tool-cache: false + mandb: true + android: false + dotnet: true + haskell: true + large-packages: false + docker-images: true + swap-storage: false - - name: 📥 Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - fetch-depth: 0 - submodules: recursive - show-progress: false + - name: 📥 Checkout code + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + fetch-depth: 0 + submodules: recursive + show-progress: false - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - - name: 💾 Cache Bun dependencies - uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 - with: - path: ~/.bun/install/cache - key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} - restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-bun- + - name: ☕ Set up JDK 17 + # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build + # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure + # fail). Pin Temurin 17 for a deterministic Android build. + uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 + with: + distribution: temurin + java-version: "17" + + - parallel: + - name: 💾 Cache Bun dependencies + uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 + with: + path: ~/.bun/install/cache + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} + restore-keys: | + ${{ runner.os }}-${{ runner.arch }}-bun- + + - name: 💾 Cache Gradle global + uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 + with: + path: | + ~/.gradle/caches/modules-2 + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ runner.arch }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-${{ runner.arch }}-gradle- - name: 📦 Install dependencies and reload submodules run: | bun install --frozen-lockfile bun run submodule-reload - - name: ☕ Set up JDK 17 - # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build - # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure - # fail). Pin Temurin 17 for a deterministic Android build. - uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 - with: - distribution: temurin - java-version: "17" - - - name: 💾 Cache Gradle global - uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 - with: - path: | - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper - key: ${{ runner.os }}-${{ runner.arch }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-gradle- - - name: 🛠️ Generate project files run: bun run prebuild @@ -130,64 +132,66 @@ jobs: actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - - name: 🗑️ Free Disk Space - uses: BRAINSia/free-disk-space@7048ffbf50819342ac964ef3998a51c2564a8a75 # v2.1.3 - with: - tool-cache: false - mandb: true - android: false - dotnet: true - haskell: true - large-packages: false - docker-images: true - swap-storage: false + - parallel: + - name: 🗑️ Free Disk Space + uses: BRAINSia/free-disk-space@7048ffbf50819342ac964ef3998a51c2564a8a75 # v2.1.3 + with: + tool-cache: false + mandb: true + android: false + dotnet: true + haskell: true + large-packages: false + docker-images: true + swap-storage: false - - name: 📥 Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - fetch-depth: 0 - submodules: recursive - show-progress: false + - name: 📥 Checkout code + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + fetch-depth: 0 + submodules: recursive + show-progress: false - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - - name: 💾 Cache Bun dependencies - uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 - with: - path: ~/.bun/install/cache - key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} - restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-bun- + - name: ☕ Set up JDK 17 + # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build + # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure + # fail). Pin Temurin 17 for a deterministic Android build. + uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 + with: + distribution: temurin + java-version: "17" + + - parallel: + - name: 💾 Cache Bun dependencies + uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 + with: + path: ~/.bun/install/cache + key: ${{ runner.os }}-${{ runner.arch }}-bun-${{ hashFiles('bun.lock') }} + restore-keys: | + ${{ runner.os }}-${{ runner.arch }}-bun- + + - name: 💾 Cache Gradle global + uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 + with: + path: | + ~/.gradle/caches/modules-2 + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ runner.arch }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-${{ runner.arch }}-gradle- - name: 📦 Install dependencies and reload submodules run: | bun install --frozen-lockfile bun run submodule-reload - - name: ☕ Set up JDK 17 - # ubuntu-26.04 defaults to JDK 25, which breaks the RN/AGP native build - # (Kotlin falls back to JVM_23, the foojay toolchain + CMake configure - # fail). Pin Temurin 17 for a deterministic Android build. - uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 - with: - distribution: temurin - java-version: "17" - - - name: 💾 Cache Gradle global - uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 - with: - path: | - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper - key: ${{ runner.os }}-${{ runner.arch }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-gradle- - - name: 🛠️ Generate project files run: bun run prebuild:tv @@ -229,19 +233,33 @@ jobs: actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - - name: 📥 Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - fetch-depth: 0 - submodules: recursive - show-progress: false + - parallel: + - name: 📥 Checkout code + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + fetch-depth: 0 + submodules: recursive + show-progress: false - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" + + - name: 🔧 Setup Xcode + uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 + with: + # renovate: datasource=custom.xcode depName=xcode versioning=loose + xcode-version: "26.5" + + - name: 🏗️ Setup EAS + uses: expo/expo-github-action@eab7a230208c952974db8c3245cfd78402c7b385 # v9.0.0 + with: + eas-version: latest + token: ${{ secrets.EXPO_TOKEN }} + eas-cache: true - name: 💾 Cache Bun dependencies uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 @@ -259,19 +277,6 @@ jobs: - name: 🛠️ Generate project files run: bun run prebuild - - name: 🔧 Setup Xcode - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 - with: - # renovate: datasource=custom.xcode depName=xcode versioning=loose - xcode-version: "26.5" - - - name: 🏗️ Setup EAS - uses: expo/expo-github-action@eab7a230208c952974db8c3245cfd78402c7b385 # main - with: - eas-version: latest - token: ${{ secrets.EXPO_TOKEN }} - eas-cache: true - - name: 🚀 Build iOS app env: EXPO_TV: 0 @@ -301,19 +306,26 @@ jobs: actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - - name: 📥 Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - fetch-depth: 0 - submodules: recursive - show-progress: false + - parallel: + - name: 📥 Checkout code + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + fetch-depth: 0 + submodules: recursive + show-progress: false - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" + + - name: 🔧 Setup Xcode + uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 + with: + # renovate: datasource=custom.xcode depName=xcode versioning=loose + xcode-version: "26.5" - name: 💾 Cache Bun dependencies uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 @@ -331,12 +343,6 @@ jobs: - name: 🛠️ Generate project files run: bun run prebuild - - name: 🔧 Setup Xcode - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 - with: - # renovate: datasource=custom.xcode depName=xcode versioning=loose - xcode-version: "26.5" - - name: 🚀 Build iOS app env: EXPO_TV: 0 @@ -368,19 +374,33 @@ jobs: actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - - name: 📥 Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - fetch-depth: 0 - submodules: recursive - show-progress: false + - parallel: + - name: 📥 Checkout code + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + fetch-depth: 0 + submodules: recursive + show-progress: false - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" + + - name: 🔧 Setup Xcode + uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 + with: + # renovate: datasource=custom.xcode depName=xcode versioning=loose + xcode-version: "26.5" + + - name: 🏗️ Setup EAS + uses: expo/expo-github-action@eab7a230208c952974db8c3245cfd78402c7b385 # v9.0.0 + with: + eas-version: latest + token: ${{ secrets.EXPO_TOKEN }} + eas-cache: true - name: 💾 Cache Bun dependencies uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 @@ -398,19 +418,6 @@ jobs: - name: 🛠️ Generate project files run: bun run prebuild:tv - - name: 🔧 Setup Xcode - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 - with: - # renovate: datasource=custom.xcode depName=xcode versioning=loose - xcode-version: "26.5" - - - name: 🏗️ Setup EAS - uses: expo/expo-github-action@eab7a230208c952974db8c3245cfd78402c7b385 # main - with: - eas-version: latest - token: ${{ secrets.EXPO_TOKEN }} - eas-cache: true - - name: 🚀 Build iOS app env: EXPO_TV: 1 @@ -438,19 +445,26 @@ jobs: actions: write # dispatch artifact-comment.yml to refresh the PR comment steps: - - name: 📥 Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - fetch-depth: 0 - submodules: recursive - show-progress: false + - parallel: + - name: 📥 Checkout code + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + fetch-depth: 0 + submodules: recursive + show-progress: false - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" + + - name: 🔧 Setup Xcode + uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 + with: + # renovate: datasource=custom.xcode depName=xcode versioning=loose + xcode-version: "26.5" - name: 💾 Cache Bun dependencies uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 @@ -468,12 +482,6 @@ jobs: - name: 🛠️ Generate project files run: bun run prebuild:tv - - name: 🔧 Setup Xcode - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 - with: - # renovate: datasource=custom.xcode depName=xcode versioning=loose - xcode-version: "26.5" - - name: 🚀 Build iOS app env: EXPO_TV: 1 diff --git a/.github/workflows/check-lockfile.yml b/.github/workflows/check-lockfile.yml index d4165055..00d045c0 100644 --- a/.github/workflows/check-lockfile.yml +++ b/.github/workflows/check-lockfile.yml @@ -18,19 +18,20 @@ jobs: contents: read steps: - - name: 📥 Checkout repository - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - show-progress: false - submodules: recursive - fetch-depth: 0 + - parallel: + - name: 📥 Checkout repository + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + show-progress: false + submodules: recursive + fetch-depth: 0 - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: 💾 Cache Bun dependencies uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 diff --git a/.github/workflows/detect-duplicate.yml b/.github/workflows/detect-duplicate.yml index cab53d61..a70b6ffb 100644 --- a/.github/workflows/detect-duplicate.yml +++ b/.github/workflows/detect-duplicate.yml @@ -20,14 +20,15 @@ jobs: issues: write contents: read steps: - - name: 📥 Checkout repository - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - parallel: + - name: 📥 Checkout repository + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" - name: 🔍 Detect duplicate issues run: bun scripts/detect-duplicate-issue.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 027eab0d..641239f6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,6 +13,8 @@ name: 🚀 Release (EAS build + submit) concurrency: group: release-${{ github.ref }} cancel-in-progress: false + # Queue successive releases in order instead of dropping the extra pending run. + queue: max on: push: @@ -63,18 +65,26 @@ jobs: artifact_name: streamyfin-android-tv-apk steps: - - name: 📥 Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - fetch-depth: 0 - submodules: recursive - show-progress: false + - parallel: + - name: 📥 Checkout code + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + fetch-depth: 0 + submodules: recursive + show-progress: false - - name: 🍞 Setup Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - # renovate: datasource=npm depName=bun - bun-version: "1.3.14" + - name: 🍞 Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + # renovate: datasource=npm depName=bun + bun-version: "1.3.14" + + - name: 🏗️ Setup EAS + uses: expo/expo-github-action@eab7a230208c952974db8c3245cfd78402c7b385 # v9.0.0 + with: + eas-version: latest + token: ${{ secrets.EXPO_TOKEN }} + eas-cache: true - name: 💾 Cache Bun dependencies uses: actions/cache@2c8a9bd7457de244a408f35966fab2fb45fda9c8 # v6.0.0 @@ -89,13 +99,6 @@ jobs: bun install --frozen-lockfile bun run submodule-reload - - name: 🏗️ Setup EAS - uses: expo/expo-github-action@eab7a230208c952974db8c3245cfd78402c7b385 # main - with: - eas-version: latest - token: ${{ secrets.EXPO_TOKEN }} - eas-cache: true - # tvOS uses credentialsSource: local — restore the gitignored # credentials.json + cert + provisioning profiles from secrets. - name: 🔐 Restore tvOS signing credentials