diff --git a/.github/workflows/build-nightly-container.yml b/.github/workflows/build-nightly-container.yml index 88051d15..e37b9c96 100644 --- a/.github/workflows/build-nightly-container.yml +++ b/.github/workflows/build-nightly-container.yml @@ -29,7 +29,7 @@ jobs: - os: ubuntu-24.04-arm platform: linux/arm64/v8 name: "ARM64" - dockerfile: "docker/Dockerfile.arm64" + dockerfile: "docker/Dockerfile" tag_suffix: "-arm64" runs-on: ${{ matrix.os }} @@ -65,10 +65,31 @@ jobs: uses: docker/build-push-action@v7 with: context: . - file: ${{ matrix.dockerfile }} + file: ${{ matrix.dockerfile }} platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} push: true tags: ${{ steps.meta.outputs.tags }} build-args: | "release=1" + + combine-multiarch-images: + needs: release + runs-on: ubuntu-latest + steps: + - name: Login to registry + uses: docker/login-action@v4 + with: + registry: quay.io + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_PASSWORD }} + + # https://github.com/marketplace/actions/docker-manifest-create-action + - name: Create and push manifest + uses: int128/docker-manifest-create-action@v2.21.0 + with: + push: true + tags: quay.io/invidious/invidious:master + sources: | + quay.io/invidious/invidious:master + quay.io/invidious/invidious:master-arm64 diff --git a/.github/workflows/build-stable-container.yml b/.github/workflows/build-stable-container.yml index ee4c6eab..9058d914 100644 --- a/.github/workflows/build-stable-container.yml +++ b/.github/workflows/build-stable-container.yml @@ -20,7 +20,7 @@ jobs: - os: ubuntu-24.04-arm platform: linux/arm64/v8 name: "ARM64" - dockerfile: "docker/Dockerfile.arm64" + dockerfile: "docker/Dockerfile" tag_suffix: "-arm64" runs-on: ${{ matrix.os }} @@ -57,10 +57,31 @@ jobs: uses: docker/build-push-action@v7 with: context: . - file: ${{ matrix.dockerfile }} + file: ${{ matrix.dockerfile }} platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} push: true tags: ${{ steps.meta.outputs.tags }} build-args: | "release=1" + + combine-multiarch-images: + needs: release + runs-on: ubuntu-latest + steps: + - name: Login to registry + uses: docker/login-action@v4 + with: + registry: quay.io + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_PASSWORD }} + + # https://github.com/marketplace/actions/docker-manifest-create-action + - name: Create and push manifest + uses: int128/docker-manifest-create-action@v2.21.0 + with: + push: true + tags: quay.io/invidious/invidious:latest + sources: | + quay.io/invidious/invidious:latest + quay.io/invidious/invidious:latest-arm64 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0ea7eca..e3ea7335 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: - 1.17.1 - 1.18.2 - 1.19.2 - - 1.20.1 + - 1.20.2 include: - crystal: nightly stable: false @@ -100,10 +100,6 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Use ARM64 Dockerfile if ARM64 - if: ${{ matrix.name == 'ARM64' }} - run: sed -i 's/Dockerfile/Dockerfile.arm64/' docker-compose.yml - - name: Build Docker run: docker compose build diff --git a/docker/Dockerfile b/docker/Dockerfile index 820005ba..0822aafe 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,8 +1,8 @@ -# https://github.com/openssl/openssl/releases/tag/openssl-3.5.2 -ARG OPENSSL_VERSION='3.5.2' -ARG OPENSSL_SHA256='c53a47e5e441c930c3928cf7bf6fb00e5d129b630e0aa873b08258656e7345ec' +# https://github.com/openssl/openssl/releases/tag/openssl-3.6.2 +ARG OPENSSL_VERSION='3.6.2' +ARG OPENSSL_SHA256='aaf51a1fe064384f811daeaeb4ec4dce7340ec8bd893027eee676af31e83a04f' -FROM crystallang/crystal:1.20.1-alpine AS dependabot-crystal +FROM crystallang/crystal:1.20.2-alpine AS dependabot-crystal # We compile openssl ourselves due to a memory leak in how crystal interacts # with openssl diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 deleted file mode 100644 index a86507e1..00000000 --- a/docker/Dockerfile.arm64 +++ /dev/null @@ -1,83 +0,0 @@ -# https://github.com/openssl/openssl/releases/tag/openssl-3.5.2 -ARG OPENSSL_VERSION='3.5.2' -ARG OPENSSL_SHA256='c53a47e5e441c930c3928cf7bf6fb00e5d129b630e0aa873b08258656e7345ec' - -FROM alpine:edge AS dependabot-alpine - -# We compile openssl ourselves due to a memory leak in how crystal interacts -# with openssl -# Reference: https://github.com/iv-org/invidious/issues/1438#issuecomment-3087636228 -FROM dependabot-alpine AS openssl-builder -RUN apk add --no-cache curl perl linux-headers build-base - -WORKDIR / - -ARG OPENSSL_VERSION -ARG OPENSSL_SHA256 -RUN curl -Ls "https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz" --output openssl-${OPENSSL_VERSION}.tar.gz -RUN echo "${OPENSSL_SHA256} openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c -RUN tar -xzvf openssl-${OPENSSL_VERSION}.tar.gz - -RUN cd openssl-${OPENSSL_VERSION} && ./Configure --openssldir=/etc/ssl && make -j$(nproc) - -FROM dependabot-alpine AS builder -RUN apk add --no-cache 'crystal=1.20.1-r0' shards \ - sqlite-static yaml-static yaml-dev \ - pcre2-static gc-static \ - libxml2-static zlib-static \ - openssl-libs-static openssl-dev musl-dev xz-static - -ARG release - -WORKDIR /invidious -COPY ./shard.yml ./shard.yml -COPY ./shard.lock ./shard.lock -RUN shards install --production - -COPY ./src/ ./src/ -# TODO: .git folder is required for building – this is destructive. -# See definition of CURRENT_BRANCH, CURRENT_COMMIT and CURRENT_VERSION. -COPY ./.git/ ./.git/ - -# Required for fetching player dependencies -COPY ./scripts/ ./scripts/ -COPY ./assets/ ./assets/ -COPY ./videojs-dependencies.yml ./videojs-dependencies.yml - -RUN crystal spec --warnings all \ - --link-flags "-lxml2 -llzma" - -ARG OPENSSL_VERSION -COPY --from=openssl-builder /openssl-${OPENSSL_VERSION} /openssl-${OPENSSL_VERSION} - -RUN --mount=type=cache,target=/root/.cache/crystal if [[ "${release}" == 1 ]] ; then \ - PKG_CONFIG_PATH=/openssl-${OPENSSL_VERSION} \ - crystal build ./src/invidious.cr \ - --release \ - --static --warnings all \ - --link-flags "-lxml2 -llzma"; \ - else \ - PKG_CONFIG_PATH=/openssl-${OPENSSL_VERSION} \ - crystal build ./src/invidious.cr \ - --static --warnings all \ - --link-flags "-lxml2 -llzma"; \ - fi - -FROM alpine:3.23 -RUN apk add --no-cache rsvg-convert ttf-opensans tini tzdata -WORKDIR /invidious -RUN addgroup -g 1000 -S invidious && \ - adduser -u 1000 -S invidious -G invidious -COPY --chown=invidious ./config/config.* ./config/ -RUN mv -n config/config.example.yml config/config.yml -RUN sed -i 's/host: \(127.0.0.1\|localhost\)/host: invidious-db/' config/config.yml -COPY ./config/sql/ ./config/sql/ -COPY ./locales/ ./locales/ -COPY --from=builder /invidious/assets ./assets/ -COPY --from=builder /invidious/invidious . -RUN chmod o+rX -R ./assets ./config ./locales - -EXPOSE 3000 -USER invidious -ENTRYPOINT ["/sbin/tini", "--"] -CMD [ "/invidious/invidious" ] diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr index a6a461ae..796c0c91 100644 --- a/src/invidious/views/watch.ecr +++ b/src/invidious/views/watch.ecr @@ -125,7 +125,7 @@ we're going to need to do it here in order to allow for translations. end -%> <%= I18n.translate(locale, "videoinfo_watch_on_youTube") %> - (<%= I18n.translate(locale, "videoinfo_youTube_embed_link") %>) + (<%= I18n.translate(locale, "videoinfo_youTube_embed_link") %>)
diff --git a/src/invidious/yt_backend/extractors.cr b/src/invidious/yt_backend/extractors.cr index 04e00f20..38c869e4 100644 --- a/src/invidious/yt_backend/extractors.cr +++ b/src/invidious/yt_backend/extractors.cr @@ -651,8 +651,7 @@ private module Parsers playlist_id = item_contents["contentId"].as_s thumbnail_view_model = item_contents.dig( - "contentImage", "collectionThumbnailViewModel", - "primaryThumbnail", "thumbnailViewModel" + "contentImage", "thumbnailViewModel" ) thumbnail = thumbnail_view_model.dig("image", "sources", 0, "url").as_s