blob: f7348223d0a80cf02b72fdab02378b5615087112 [file]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# Apache Iggy (Incubating) is an effort undergoing incubation at the Apache
# Software Foundation (ASF), sponsored by the Apache Incubator PMC.
#
# Incubation is required of all newly accepted projects until a further review
# indicates that the infrastructure, communications, and decision making
# process have stabilized in a manner consistent with other successful ASF
# projects.
#
# While incubation status is not necessarily a reflection of the completeness
# or stability of the code, it does indicate that the project has yet to be
# fully endorsed by the ASF.
# Build context for this Dockerfile is the repository root (NOT web/), so
# that the consolidated scripts/ci/third-party-licenses.sh and its renderer
# are reachable. See .github/actions/utils/docker-buildx/action.yml.
FROM node:lts-alpine AS deps
WORKDIR /app
COPY web/package*.json ./
RUN npm ci --prefer-offline --no-audit
FROM node:lts-alpine AS builder
WORKDIR /app
# bash required by scripts/ci/third-party-licenses.sh; node:lts-alpine
# ships only ash by default. curl + tar used to fetch cargo-about
# (third-party-licenses.sh autodetects rust manifests vs node manifest;
# the web Dockerfile only feeds it a node manifest, so cargo-about is
# not actually invoked here, but bash is.)
RUN apk add --no-cache bash
COPY --from=deps /app/node_modules ./node_modules
COPY web/ ./
RUN npm run build
# Generate LICENSE-binary for the production npm dependencies bundled
# into this image. Required by ASF release policy: convenience binaries
# that bundle third-party code MUST include the full license text of
# every bundled package inside the artifact. Uses the same consolidated
# script and SPDX allow-list that the pre-merge `--validate` gate uses,
# so the published image cannot diverge from policy.
COPY scripts/ci/third-party-licenses.sh /opt/iggy/scripts/ci/third-party-licenses.sh
COPY scripts/ci/render-node-licenses.mjs /opt/iggy/scripts/ci/render-node-licenses.mjs
RUN /opt/iggy/scripts/ci/third-party-licenses.sh --generate \
--manifest /app \
--output /app/LICENSE-binary
FROM node:lts-alpine AS production
WORKDIR /app
COPY web/package*.json ./
RUN npm ci --production --prefer-offline --no-audit
COPY --from=builder /app/build ./build
COPY --from=builder /app/LICENSE-binary /usr/share/doc/iggy-web-ui/LICENSE-binary
COPY LICENSE NOTICE /usr/share/doc/iggy-web-ui/
USER node
EXPOSE 3050
ENV PORT=3050
ENV NODE_ENV=production
CMD ["node", "build"]