mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-09-08 02:39:10 +02:00
* fix(mealie): build the frontend with pnpm and the upstream lockfile Upstream mealie migrated frontend/ from yarn to pnpm in v3.24.0 and deleted frontend/yarn.lock. Our builder stage kept running "yarn install --frozen-lockfile", which silently degraded to a fresh, unpinned resolution of every dependency. That worked until a newer vuetify 4.x release dropped the "vuetify/labs/rules" entry point, at which point "nuxt generate" failed with: Rolldown failed to resolve import "vuetify/labs/rules" from "virtual:nuxt:.nuxt%2Fvuetify-nuxt-plugin.client.mjs" and the v3.25.1 updater build was reverted. Mirror upstream's docker/Dockerfile frontend stage instead: node:24, a global pnpm@11, and "pnpm install --frozen-lockfile" against the committed pnpm-lock.yaml, so the dependency set is the one upstream tests. Also copy the frontend tree with "cp -a frontend/." so dotfiles such as .nuxtignore come across, and shallow-clone the tag. Bumps the add-on to v3.25.1, the version the updater bot could not build. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: record the shipped upstream release in updater.json Each PR publishes an upstream version the updater bot had already selected before CI reverted its commit, but updater.json still recorded the previous one. The updater reads upstream_version as CURRENT and enters its update path whenever it differs from the latest tag, so its next run would process the same release again and derive a synthetic trailing-.1 version, producing a redundant release, a duplicate CHANGELOG entry and a wasted build. These values are exactly what the bot itself wrote in the reverted commit; this restores its own record for a release now being shipped rather than choosing a new one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
157 lines
4.6 KiB
Docker
157 lines
4.6 KiB
Docker
#============================#
|
|
# ALEXBELGIUM'S DOCKERFILE #
|
|
#============================#
|
|
# _.------.
|
|
# _.-` ('>.-`"""-.
|
|
# '.--'` _'` _ .--.)
|
|
# -' '-.-';` `
|
|
# ' - _.' ``'--.
|
|
# '---` .-'""`
|
|
# /`
|
|
#=== Home Assistant Addon ===#
|
|
|
|
#################
|
|
# 1 Build Image #
|
|
#################
|
|
|
|
# Stage 1: Build Frontend with SUB_PATH
|
|
# Mirrors upstream docker/Dockerfile: node:24 + pnpm, installing from the
|
|
# committed pnpm-lock.yaml. Upstream dropped frontend/yarn.lock in v3.24.0, so a
|
|
# yarn install here resolved every dependency fresh and eventually picked a
|
|
# vuetify release without "vuetify/labs/rules", breaking "nuxt generate".
|
|
FROM node:24 AS frontend-builder
|
|
|
|
# Set the SUB_PATH environment variable
|
|
ARG SUB_PATH="/mealie/"
|
|
ENV SUB_PATH=$SUB_PATH
|
|
|
|
ENV MEALIE_VERSION="v3.25.1"
|
|
|
|
RUN npm install --global pnpm@11
|
|
|
|
# Clone the Mealie repository to get the frontend source code
|
|
WORKDIR /frontend
|
|
# hadolint ignore=DL3003
|
|
RUN mkdir -p /frontend/tempdir && cd /frontend/tempdir && \
|
|
git clone --depth 1 --branch "$MEALIE_VERSION" https://github.com/mealie-recipes/mealie.git . && \
|
|
cp -a frontend/. /frontend/ && cd /frontend && rm -rf tempdir && \
|
|
pnpm install --frozen-lockfile
|
|
|
|
# Build the frontend
|
|
RUN pnpm generate
|
|
|
|
# Stage 2: Build the Final Image
|
|
FROM hkotel/mealie:latest
|
|
|
|
# Copy the rebuilt frontend files into the final image
|
|
WORKDIR /mealie
|
|
COPY --from=frontend-builder /frontend/dist /mealie/frontend
|
|
|
|
##################
|
|
# 2 Modify Image #
|
|
##################
|
|
|
|
# Set S6 wait time
|
|
ENV S6_CMD_WAIT_FOR_SERVICES=1 \
|
|
S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \
|
|
S6_SERVICES_GRACETIME=0
|
|
|
|
# Correct data path
|
|
# hadolint ignore=DL4006,DL3003
|
|
RUN \
|
|
# Copy frontend
|
|
cd /opt/mealie/lib/python*/site-packages/mealie && \
|
|
rm -r frontend && mv /mealie/frontend . && \
|
|
# avoid changing user
|
|
sed -i "s|change_user$|# change_user|g" /app/run.sh && sed -i 's|\${!file_var}|${!file_var:-}|g' /app/run.sh
|
|
|
|
##################
|
|
# 3 Install apps #
|
|
##################
|
|
|
|
# Add rootfs
|
|
COPY rootfs/ /
|
|
RUN find . -type f \( -name "*.sh" -o -name "run" -o -name "finish" \) -print -exec chmod +x {} \;
|
|
|
|
# Uses /bin for compatibility purposes
|
|
# hadolint ignore=DL4005
|
|
RUN if [ ! -f /bin/sh ] && [ -f /usr/bin/sh ]; then ln -s /usr/bin/sh /bin/sh; fi && \
|
|
if [ ! -f /bin/bash ] && [ -f /usr/bin/bash ]; then ln -s /usr/bin/bash /bin/bash; fi
|
|
|
|
# Modules
|
|
ARG MODULES="00-banner.sh 01-custom_script.sh"
|
|
|
|
# Automatic modules download
|
|
COPY ha_automodules.sh /ha_automodules.sh
|
|
RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_automodules.sh
|
|
|
|
# Manual apps
|
|
ENV PACKAGES="nginx"
|
|
|
|
# Automatic apps & bashio
|
|
COPY ha_autoapps.sh /ha_autoapps.sh
|
|
RUN chmod 744 /ha_autoapps.sh && /ha_autoapps.sh "$PACKAGES" && rm /ha_autoapps.sh
|
|
|
|
################
|
|
# 4 Entrypoint #
|
|
################
|
|
|
|
# Add entrypoint
|
|
ENV S6_STAGE2_HOOK=/ha_entrypoint.sh
|
|
COPY ha_entrypoint.sh /ha_entrypoint.sh
|
|
RUN chmod 777 /ha_entrypoint.sh
|
|
|
|
# Install bashio
|
|
COPY bashio-standalone.sh /usr/local/lib/bashio-standalone.sh
|
|
RUN chmod 0755 /usr/local/lib/bashio-standalone.sh
|
|
|
|
RUN \
|
|
# Apply custom instructions to run.sh
|
|
sed -i '1d' /app/run.sh \
|
|
&& cat /app/run.sh >> /run.txt \
|
|
&& cat /run.txt > /app/run.sh \
|
|
&& chmod +x /app/run.sh
|
|
|
|
# Expose necessary ports
|
|
EXPOSE 9000
|
|
|
|
# Set the entrypoint
|
|
ENTRYPOINT ["/app/run.sh"]
|
|
|
|
############
|
|
# 5 Labels #
|
|
############
|
|
|
|
ARG BUILD_ARCH
|
|
ARG BUILD_DATE
|
|
ARG BUILD_DESCRIPTION
|
|
ARG BUILD_NAME
|
|
ARG BUILD_REF
|
|
ARG BUILD_REPOSITORY
|
|
ARG BUILD_VERSION
|
|
ENV BUILD_VERSION="${BUILD_VERSION}"
|
|
LABEL \
|
|
io.hass.name="${BUILD_NAME}" \
|
|
io.hass.description="${BUILD_DESCRIPTION}" \
|
|
io.hass.arch="${BUILD_ARCH}" \
|
|
io.hass.type="addon" \
|
|
io.hass.version=${BUILD_VERSION} \
|
|
maintainer="alexbelgium (https://github.com/alexbelgium)" \
|
|
org.opencontainers.image.title="${BUILD_NAME}" \
|
|
org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
|
|
org.opencontainers.image.vendor="Home Assistant Add-ons" \
|
|
org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \
|
|
org.opencontainers.image.licenses="MIT" \
|
|
org.opencontainers.image.url="https://github.com/alexbelgium" \
|
|
org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
|
|
org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
|
|
org.opencontainers.image.created=${BUILD_DATE} \
|
|
org.opencontainers.image.revision=${BUILD_REF} \
|
|
org.opencontainers.image.version=${BUILD_VERSION}
|
|
|
|
#################
|
|
# 6 Healthcheck #
|
|
#################
|
|
|
|
# Use upstream
|