|
1 | 1 | # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Objectionary.com |
2 | 2 | # SPDX-License-Identifier: MIT |
3 | 3 |
|
4 | | -FROM ubuntu:24.04 |
| 4 | +FROM ubuntu:24.04 AS builder |
5 | 5 |
|
6 | | -LABEL "repository"="https://github.com/objectionary/hone-maven-plugin" |
7 | | -LABEL "maintainer"="Yegor Bugayenko" |
8 | | -LABEL "version"="0.0.0" |
| 6 | +SHELL ["/bin/bash", "-e", "-c", "-o", "pipefail"] |
9 | 7 |
|
10 | 8 | ENV DEBIAN_FRONTEND=noninteractive |
11 | | - |
12 | | -WORKDIR /hone |
13 | | - |
14 | | -# To use UTF-8 locale: |
15 | 9 | ENV LC_ALL=en_US.UTF-8 |
16 | 10 | ENV LANG=en_US.UTF-8 |
17 | 11 | ENV LANGUAGE=en_US.UTF-8 |
18 | | -RUN apt-get update && apt-get install --yes --no-install-recommends locales=* \ |
19 | | - && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \ |
20 | | - && locale-gen \ |
21 | | - && update-locale LANG=en_US.UTF-8 \ |
22 | | - && printf 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8\nLANGUAGE=en_US.UTF-8\n' > /etc/default/locale \ |
23 | | - && printf 'export LC_ALL=en_US.UTF-8\n' >> "${HOME}/.profile" \ |
24 | | - && printf 'export LANG=en_US.UTF-8\n' >> "${HOME}/.profile" \ |
25 | | - && printf 'export LANGUAGE=en_US.UTF-8\n' >> "${HOME}/.profile" \ |
26 | | - && apt-get clean \ |
27 | | - && rm -rf /var/lib/apt/lists/* |
28 | 12 |
|
29 | | -# Install system dependencies: |
30 | | -RUN apt-get update \ |
31 | | - && apt-get install --yes --no-install-recommends \ |
| 13 | +RUN apt-get update && apt-get install --yes --no-install-recommends \ |
| 14 | + locales=* \ |
32 | 15 | build-essential=* \ |
33 | 16 | ca-certificates=* \ |
34 | 17 | curl=* \ |
35 | | - wget=* \ |
36 | 18 | gnupg2=* \ |
37 | 19 | libgmp-dev=* \ |
38 | | - libxml2-utils=* \ |
39 | 20 | lsb-release=* \ |
40 | | - openssl=* \ |
41 | 21 | software-properties-common=* \ |
42 | | - tree=* \ |
43 | | - unzip=* \ |
44 | 22 | zlib1g-dev=* \ |
| 23 | + && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \ |
| 24 | + && locale-gen \ |
| 25 | + && update-locale LANG=en_US.UTF-8 \ |
45 | 26 | && apt-get clean \ |
46 | 27 | && rm -rf /var/lib/apt/lists/* |
47 | 28 |
|
48 | | -# Istall Java: |
49 | | -ENV JAVA_OPTS=-Xmx1g |
50 | | -ENV JAVA_VERSION=17 |
51 | | -ENV JAVA_HOME=/usr/lib/jvm/java-${JAVA_VERSION} |
52 | | -RUN apt-get --yes --fix-missing update \ |
53 | | - && apt-get --yes --no-install-recommends install ca-certificates-java=* ca-certificates=* "openjdk-${JAVA_VERSION}-jdk=*" \ |
54 | | - && update-ca-certificates \ |
55 | | - && ln -s "/usr/lib/jvm/$(find /usr/lib/jvm -name "java-1.${JAVA_VERSION}*" -exec basename {} \;)" "/usr/lib/jvm/java-${JAVA_VERSION}" \ |
56 | | - && echo "export JAVA_HOME=/usr/lib/jvm/java-${JAVA_VERSION}" >> "${HOME}/.profile" \ |
57 | | - && apt-get clean \ |
58 | | - && rm -rf /var/lib/apt/lists/* |
59 | | - |
60 | | -# Istall Maven |
61 | | -ENV MAVEN_OPTS=-Xmx1g |
62 | | -ENV MAVEN_VERSION=3.9.9 |
63 | | -ENV M2_HOME=/usr/local/apache-maven/apache-maven-${MAVEN_VERSION} |
64 | | -RUN echo "export M2_HOME=/usr/local/apache-maven/apache-maven-${MAVEN_VERSION}" >> "${HOME}/.profile" \ |
65 | | - && wget --quiet "https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \ |
66 | | - && mkdir -p /usr/local/apache-maven \ |
67 | | - && mv "apache-maven-${MAVEN_VERSION}-bin.tar.gz" /usr/local/apache-maven \ |
68 | | - && tar xzvf "/usr/local/apache-maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -C /usr/local/apache-maven/ \ |
69 | | - && update-alternatives --install /usr/bin/mvn mvn "${M2_HOME}/bin/mvn" 1 \ |
70 | | - && update-alternatives --config mvn \ |
71 | | - && mvn dependency:get -Dartifact=junit:junit:4.11 |
72 | | - |
73 | | -# Install Cabal and GHC |
74 | 29 | ARG GHC=9.6.7 |
75 | 30 | ARG CABAL=3.12.1.0 |
76 | 31 | RUN gpg --batch --recv-keys ECA44F5A172EDAD947F39E3D4275CDA6A29BED43 \ |
77 | | - && wget --quiet https://downloads.haskell.org/~ghcup/x86_64-linux-ghcup -O /usr/bin/ghcup \ |
| 32 | + && curl -sSL https://downloads.haskell.org/~ghcup/x86_64-linux-ghcup -o /usr/bin/ghcup \ |
78 | 33 | && chmod +x /usr/bin/ghcup \ |
79 | 34 | && ghcup config set gpg-setting GPGStrict \ |
80 | 35 | && ghcup -v install ghc --isolate /usr/local --force "${GHC}" \ |
81 | 36 | && ghcup -v install cabal --isolate /usr/local/bin --force "${CABAL}" \ |
82 | | - && cabal update \ |
83 | | - && ghc --version \ |
84 | | - && cabal --version |
| 37 | + && cabal update |
85 | 38 |
|
86 | | -# The value to be set in BuildMojo or in default-phino-version.txt file: |
87 | 39 | ARG PHINO_VERSION=0.0.0.0 |
88 | | -RUN cabal update \ |
89 | | - && cabal install --disable-tests --disable-coverage --overwrite-policy=always "phino-${PHINO_VERSION}" \ |
90 | | - && cp /root/.local/bin/phino /usr/bin \ |
91 | | - && phino --version |
92 | | - |
93 | | -# Remove unnecessary files to reduce image size |
94 | | -RUN rm -rf /root/.cabal \ |
95 | | - && rm -rf /root/.local/state/cabal \ |
96 | | - && rm -rf /usr/local/bin/cabal \ |
97 | | - && apt-get autoremove -y \ |
98 | | - && apt-get clean \ |
99 | | - && rm -rf /var/lib/apt/lists/* |
| 40 | +RUN cabal install --disable-tests --disable-coverage --overwrite-policy=always "phino-${PHINO_VERSION}" \ |
| 41 | + && find /root -name phino -type f 2>/dev/null | head -1 | xargs -I {} cp {} /usr/local/bin/phino \ |
| 42 | + && chmod +x /usr/local/bin/phino \ |
| 43 | + && /usr/local/bin/phino --version |
100 | 44 |
|
101 | | -COPY in-docker-pom.xml pom.xml |
| 45 | +FROM eclipse-temurin:17-jre-jammy |
102 | 46 |
|
| 47 | +LABEL "repository"="https://github.com/objectionary/hone-maven-plugin" |
| 48 | +LABEL "maintainer"="Yegor Bugayenko" |
| 49 | +LABEL "version"="0.0.0" |
| 50 | + |
| 51 | +ENV DEBIAN_FRONTEND=noninteractive |
| 52 | +ENV LC_ALL=en_US.UTF-8 |
| 53 | +ENV LANG=en_US.UTF-8 |
| 54 | +ENV LANGUAGE=en_US.UTF-8 |
| 55 | + |
| 56 | +# Install only essential runtime dependencies |
| 57 | +RUN apt-get update && apt-get install --yes --no-install-recommends \ |
| 58 | + locales=* \ |
| 59 | + ca-certificates=* \ |
| 60 | + curl=* \ |
| 61 | + wget=* \ |
| 62 | + libgmp10=* \ |
| 63 | + libxml2-utils=* \ |
| 64 | + tree=* \ |
| 65 | + unzip=* \ |
| 66 | + && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \ |
| 67 | + && locale-gen \ |
| 68 | + && update-locale LANG=en_US.UTF-8 \ |
| 69 | + && apt-get clean \ |
| 70 | + && rm -rf /var/lib/apt/lists/* |
| 71 | + |
| 72 | +# Install Maven (smaller footprint) |
| 73 | +ENV MAVEN_VERSION=3.9.9 |
| 74 | +ENV MAVEN_HOME=/opt/maven |
| 75 | +ENV PATH="${MAVEN_HOME}/bin:${PATH}" |
| 76 | +RUN wget --quiet "https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \ |
| 77 | + && tar xzf "apache-maven-${MAVEN_VERSION}-bin.tar.gz" -C /opt \ |
| 78 | + && mv "/opt/apache-maven-${MAVEN_VERSION}" "${MAVEN_HOME}" \ |
| 79 | + && rm "apache-maven-${MAVEN_VERSION}-bin.tar.gz" |
| 80 | + |
| 81 | +WORKDIR /hone |
| 82 | + |
| 83 | +# Copy phino binary and its dependencies from builder: |
| 84 | +COPY --from=builder /usr/local/bin/phino /usr/bin/phino |
| 85 | +RUN phino --version |
| 86 | + |
| 87 | +COPY in-docker-pom.xml pom.xml |
103 | 88 | COPY extensions.xml ./.mvn/ |
104 | 89 | COPY settings.xml /hone/ |
| 90 | + |
| 91 | +# Pre-download Maven dependencies and clean up unnecessary plugins |
105 | 92 | RUN mkdir -p /hone/.m2 \ |
106 | | - && mvn --settings=/hone/settings.xml --update-snapshots --batch-mode --strict-checksums --errors -Dbuildtime.output.log=true eo:help jeo:help exec:help \ |
107 | | - && chmod -R a+rwx /hone/.m2 |
| 93 | + && mvn --settings=/hone/settings.xml --update-snapshots --batch-mode --strict-checksums --errors -Dbuildtime.output.log=true eo:help jeo:help exec:help \ |
| 94 | + && chmod -R a+rwx /hone/.m2 \ |
| 95 | + && find /hone/.m2 -name "*.lastUpdated" -delete \ |
| 96 | + && find /hone/.m2 -name "_remote.repositories" -delete \ |
| 97 | + && find /hone/.m2 -name "*.sha1" -delete |
108 | 98 |
|
109 | 99 | ENV MAVEN_OPTS=-Xmx16g |
110 | 100 | ENV JAVA_OPTS=-Xmx16g |
|
0 commit comments