Skip to content

Commit b07f525

Browse files
authored
Build Ruby in a builder (#1790)
* Build Ruby in a builder Signed-off-by: Prabhu Subramanian <[email protected]> * Update pnpm Signed-off-by: Prabhu Subramanian <[email protected]> --------- Signed-off-by: Prabhu Subramanian <[email protected]>
1 parent 830a19c commit b07f525

File tree

7 files changed

+122
-97
lines changed

7 files changed

+122
-97
lines changed

.github/workflows/npm-release.yml

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,41 @@ jobs:
5353
continue-on-error: true
5454
env:
5555
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
56+
containers-ruby-builder:
57+
if: github.repository == 'CycloneDX/cdxgen'
58+
runs-on: ["self-hosted", "metal", "amd64"]
59+
permissions:
60+
contents: write
61+
packages: write
62+
id-token: write
63+
steps:
64+
- uses: actions/checkout@v4
65+
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
66+
- name: Set up Docker Buildx
67+
uses: docker/setup-buildx-action@v3
68+
- name: Log in to the Container registry
69+
uses: docker/login-action@v3
70+
with:
71+
registry: ghcr.io
72+
username: ${{ github.actor }}
73+
password: ${{ secrets.GITHUB_TOKEN }}
74+
- name: Setup docker cache dir
75+
run: |
76+
mkdir -p /tmp/ruby-builder-cache
77+
- name: Build and push Docker images
78+
uses: docker/build-push-action@v5
79+
with:
80+
context: .
81+
file: ci/base-images/al9/Dockerfile.ruby-builder
82+
platforms: linux/amd64,linux/arm64
83+
push: true
84+
tags: ghcr.io/cyclonedx/cdxgen-ruby-builder:master
85+
cache-from: type=local,src=/tmp/ruby-builder-cache
86+
cache-to: type=local,dest=/tmp/ruby-builder-cache,mode=max
5687
containers:
5788
if: github.repository == 'CycloneDX/cdxgen'
58-
runs-on: ["self-hosted", "ubuntu", "amd64"]
89+
runs-on: ["self-hosted", "metal", "amd64"]
90+
needs: [containers-ruby-builder]
5991
permissions:
6092
contents: write
6193
packages: write
@@ -110,7 +142,8 @@ jobs:
110142
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
111143
containers-secure:
112144
if: github.repository == 'CycloneDX/cdxgen'
113-
runs-on: ["self-hosted", "ubuntu", "amd64"]
145+
runs-on: ["self-hosted", "metal", "amd64"]
146+
needs: [containers-ruby-builder]
114147
permissions:
115148
contents: write
116149
packages: write
@@ -160,6 +193,7 @@ jobs:
160193
containers-deno:
161194
if: github.repository == 'CycloneDX/cdxgen'
162195
runs-on: ubuntu-latest
196+
needs: [containers-ruby-builder]
163197
permissions:
164198
contents: read
165199
packages: write

ci/Dockerfile

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM almalinux:9.5-minimal
1+
FROM ghcr.io/cyclonedx/cdxgen-ruby-builder:master
22

33
LABEL maintainer="cyclonedx" \
44
org.opencontainers.image.authors="Prabhu Subramanian <[email protected]>" \
@@ -61,12 +61,8 @@ ENV GOPATH=/opt/app-root/go \
6161
SDKMAN_DIR=/root/.sdkman \
6262
SDKMAN_CANDIDATES_DIR=/root/.sdkman/candidates \
6363
DOTNET_CLI_TELEMETRY_OPTOUT=1 \
64-
MALLOC_CONF="dirty_decay_ms:2000,narenas:2,background_thread:true" \
65-
RUBY_CONFIGURE_OPTS="--with-jemalloc --enable-yjit" \
66-
RUBYOPT="--yjit" \
67-
RUBY_BUILD_BUILD_PATH="/tmp/rbenv" \
68-
RUBY_BUILD_HTTP_CLIENT=curl
69-
ENV PATH=${PATH}:/root/.nvm/versions/node/v${NODE_VERSION}/bin:${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${GRADLE_HOME}/bin:${SCALA_HOME}/bin:${SBT_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:/usr/local/bin/:/root/.local/bin:/root/.cargo/bin:/opt/pypi/bin:/root/.rbenv/bin:/root/.rbenv/versions/3.4.2/bin:
64+
RBENV_ROOT=/opt/.rbenv
65+
ENV PATH=${PATH}:/root/.nvm/versions/node/v${NODE_VERSION}/bin:${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${GRADLE_HOME}/bin:${SCALA_HOME}/bin:${SBT_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:/usr/local/bin/:/root/.local/bin:/root/.cargo/bin:/opt/pypi/bin:/opt/.rbenv/bin:/opt/.rbenv/versions/3.4.3/bin:
7066

7167
COPY . /opt/cdxgen
7268

@@ -88,8 +84,8 @@ RUN set -e; \
8884
python${PYTHON_VERSION} python${PYTHON_VERSION}-devel python${PYTHON_VERSION}-pip glibc-common glibc-all-langpacks \
8985
openssl-devel libffi-devel libyaml zlib-devel \
9086
pcre2 which tar gzip zip unzip bzip2 sudo ncurses ncurses-devel sqlite-devel gnupg2 dotnet-sdk-9.0 \
91-
&& microdnf install -y epel-release \
92-
&& microdnf install --enablerepo=crb -y libyaml-devel jemalloc-devel \
87+
&& ruby --version \
88+
&& which ruby \
9389
&& alternatives --install /usr/bin/python3 python /usr/bin/python${PYTHON_VERSION} 10 \
9490
&& alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 10 \
9591
&& /usr/bin/python${PYTHON_VERSION} --version \
@@ -105,17 +101,6 @@ RUN set -e; \
105101
&& source /root/.nvm/nvm.sh \
106102
&& nvm install ${NODE_VERSION} \
107103
&& node --version \
108-
&& git clone https://github.com/rbenv/rbenv.git --depth=1 ~/.rbenv \
109-
&& echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc \
110-
&& echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc \
111-
&& source ~/.bashrc \
112-
&& mkdir -p "$(rbenv root)/plugins" \
113-
&& git clone https://github.com/rbenv/ruby-build.git --depth=1 "$(rbenv root)/plugins/ruby-build" \
114-
&& rbenv install ${RUBY_VERSION} -- --disable-install-doc \
115-
&& rbenv global ${RUBY_VERSION} \
116-
&& ruby --version \
117-
&& which ruby \
118-
&& rm -rf /root/.rbenv/cache $RUBY_BUILD_BUILD_PATH \
119104
&& curl -s "https://get.sdkman.io" | bash \
120105
&& echo -e "sdkman_auto_answer=true\nsdkman_selfupdate_feature=false\nsdkman_auto_env=true\nsdkman_curl_connect_timeout=20\nsdkman_curl_max_time=0" >> $HOME/.sdkman/etc/config \
121106
&& source "$HOME/.sdkman/bin/sdkman-init.sh" \

ci/Dockerfile-deno

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM almalinux:9.5-minimal
1+
FROM ghcr.io/cyclonedx/cdxgen-ruby-builder:master
22

33
LABEL maintainer="cyclonedx" \
44
org.opencontainers.image.authors="Prabhu Subramanian <[email protected]>" \
@@ -59,12 +59,8 @@ ENV GOPATH=/opt/app-root/go \
5959
SDKMAN_CANDIDATES_DIR=/root/.sdkman/candidates \
6060
PYTHONPATH=/opt/pypi:${PYTHONPATH} \
6161
DOTNET_CLI_TELEMETRY_OPTOUT=1 \
62-
MALLOC_CONF="dirty_decay_ms:2000,narenas:2,background_thread:true" \
63-
RUBY_CONFIGURE_OPTS="--with-jemalloc --enable-yjit" \
64-
RUBYOPT="--yjit" \
65-
RUBY_BUILD_BUILD_PATH="/tmp/rbenv" \
66-
RUBY_BUILD_HTTP_CLIENT=curl
67-
ENV PATH=${PATH}:${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${GRADLE_HOME}/bin:${SCALA_HOME}/bin:${SBT_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:/usr/local/bin/:/root/.local/bin:/root/.deno/bin:/root/.cargo/bin:/opt/pypi/bin:/root/.rbenv/bin:/root/.rbenv/versions/3.4.2/bin:
62+
RBENV_ROOT=/opt/.rbenv
63+
ENV PATH=${PATH}:${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${GRADLE_HOME}/bin:${SCALA_HOME}/bin:${SBT_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:/usr/local/bin/:/root/.local/bin:/root/.deno/bin:/root/.cargo/bin:/opt/pypi/bin:/opt/.rbenv/bin:/opt/.rbenv/versions/3.4.3/bin:
6864

6965
RUN set -e; \
7066
ARCH_NAME="$(rpm --eval '%{_arch}')"; \
@@ -84,8 +80,8 @@ RUN set -e; \
8480
python${PYTHON_VERSION} python${PYTHON_VERSION}-devel python${PYTHON_VERSION}-pip glibc-common glibc-all-langpacks \
8581
openssl-devel libffi-devel libyaml zlib-devel \
8682
pcre2 which tar gzip zip unzip bzip2 sudo ncurses ncurses-devel sqlite-devel gnupg2 dotnet-sdk-9.0 \
87-
&& microdnf install -y epel-release \
88-
&& microdnf install --enablerepo=crb -y libyaml-devel jemalloc-devel \
83+
&& ruby --version \
84+
&& which ruby \
8985
&& alternatives --install /usr/bin/python3 python /usr/bin/python${PYTHON_VERSION} 10 \
9086
&& alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 10 \
9187
&& python${PYTHON_VERSION} --version \
@@ -105,17 +101,6 @@ RUN set -e; \
105101
&& curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
106102
&& cargo --version \
107103
&& rustc --version \
108-
&& git clone https://github.com/rbenv/rbenv.git --depth=1 ~/.rbenv \
109-
&& echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc \
110-
&& echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc \
111-
&& source ~/.bashrc \
112-
&& mkdir -p "$(rbenv root)/plugins" \
113-
&& git clone https://github.com/rbenv/ruby-build.git --depth=1 "$(rbenv root)/plugins/ruby-build" \
114-
&& rbenv install ${RUBY_VERSION} -- --disable-install-doc \
115-
&& rbenv global ${RUBY_VERSION} \
116-
&& ruby --version \
117-
&& which ruby \
118-
&& rm -rf /root/.rbenv/cache $RUBY_BUILD_BUILD_PATH \
119104
&& curl -s "https://get.sdkman.io" | bash \
120105
&& echo -e "sdkman_auto_answer=true\nsdkman_selfupdate_feature=false\nsdkman_auto_env=true" >> $HOME/.sdkman/etc/config \
121106
&& source "$HOME/.sdkman/bin/sdkman-init.sh" \

ci/Dockerfile-secure

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM almalinux:9.5-minimal
1+
FROM ghcr.io/cyclonedx/cdxgen-ruby-builder:master
22

33
LABEL maintainer="cyclonedx" \
44
org.opencontainers.image.authors="Prabhu Subramanian <[email protected]>" \
@@ -66,13 +66,8 @@ ENV GOPATH=/opt/app-root/go \
6666
CDXGEN_TEMP_DIR=/tmp/cdxgen-temp \
6767
SDKMAN_DIR=/opt/.sdkman \
6868
SDKMAN_CANDIDATES_DIR=/opt/.sdkman/candidates \
69-
MALLOC_CONF="dirty_decay_ms:2000,narenas:2,background_thread:true" \
70-
RUBY_CONFIGURE_OPTS="--with-jemalloc --enable-yjit" \
71-
RUBYOPT="--yjit" \
72-
RUBY_BUILD_BUILD_PATH="/tmp/rbenv" \
73-
RUBY_BUILD_HTTP_CLIENT=curl \
7469
RBENV_ROOT=/opt/.rbenv
75-
ENV PATH=${PATH}:/opt/bin:/opt/.nvm/versions/node/v${NODE_VERSION}/bin:${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${GRADLE_HOME}/bin:${SCALA_HOME}/bin:${SBT_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:/usr/local/bin/:/opt/.local/bin:/opt/pypi/bin:/opt/.rbenv/bin:/opt/.rbenv/versions/3.4.2/bin:
70+
ENV PATH=${PATH}:/opt/bin:/opt/.nvm/versions/node/v${NODE_VERSION}/bin:${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${GRADLE_HOME}/bin:${SCALA_HOME}/bin:${SBT_HOME}/bin:${GOPATH}/bin:/usr/local/go/bin:/usr/local/bin/:/opt/.local/bin:/opt/pypi/bin:/opt/.rbenv/bin:/opt/.rbenv/versions/3.4.3/bin:
7671

7772
COPY . /opt/cdxgen
7873

@@ -94,8 +89,8 @@ RUN set -e; \
9489
python${PYTHON_VERSION} python${PYTHON_VERSION}-devel python${PYTHON_VERSION}-pip glibc-common glibc-all-langpacks \
9590
openssl-devel libffi-devel libyaml zlib-devel \
9691
pcre2 which tar gzip zip unzip bzip2 sudo ncurses ncurses-devel sqlite-devel gnupg2 dotnet-sdk-9.0 rust cargo \
97-
&& microdnf install -y epel-release \
98-
&& microdnf install --enablerepo=crb -y libyaml-devel jemalloc-devel \
92+
&& ruby --version \
93+
&& which ruby \
9994
&& alternatives --install /usr/bin/python3 python /usr/bin/python${PYTHON_VERSION} 10 \
10095
&& alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 10 \
10196
&& /usr/bin/python${PYTHON_VERSION} --version \
@@ -111,19 +106,6 @@ RUN set -e; \
111106
&& source ${NVM_DIR}/nvm.sh \
112107
&& nvm install ${NODE_VERSION} \
113108
&& node --version \
114-
&& git clone https://github.com/rbenv/rbenv.git --depth=1 /opt/.rbenv \
115-
&& echo 'export PATH="/opt/.rbenv/bin:$PATH"' >> ~/.bashrc \
116-
&& echo 'eval "$(/opt/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc \
117-
&& echo 'export RBENV_ROOT=/opt/.rbenv' >> ~/.bashrc \
118-
&& echo 'export NVM_DIR=/opt/.nvm' >> ~/.bashrc \
119-
&& source ~/.bashrc \
120-
&& mkdir -p "/opt/.rbenv/plugins" \
121-
&& git clone https://github.com/rbenv/ruby-build.git --depth=1 "/opt/.rbenv/plugins/ruby-build" \
122-
&& rbenv install ${RUBY_VERSION} -- --disable-install-doc \
123-
&& rbenv global ${RUBY_VERSION} \
124-
&& rm -rf /opt/.rbenv/cache $RUBY_BUILD_BUILD_PATH \
125-
&& ruby --version \
126-
&& which ruby \
127109
&& curl -s "https://get.sdkman.io" | bash \
128110
&& echo -e "sdkman_auto_answer=true\nsdkman_selfupdate_feature=false\nsdkman_auto_env=true\nsdkman_curl_connect_timeout=20\nsdkman_curl_max_time=0" >> /opt/.sdkman/etc/config \
129111
&& source "/opt/.sdkman/bin/sdkman-init.sh" \
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
FROM almalinux:9.5-minimal AS ruby-builder
2+
3+
LABEL maintainer="cyclonedx" \
4+
org.opencontainers.image.authors="Prabhu Subramanian <[email protected]>" \
5+
org.opencontainers.image.source="https://github.com/cyclonedx/cdxgen" \
6+
org.opencontainers.image.url="https://github.com/cyclonedx/cdxgen" \
7+
org.opencontainers.image.version="11.3.x" \
8+
org.opencontainers.image.vendor="cyclonedx" \
9+
org.opencontainers.image.licenses="Apache-2.0" \
10+
org.opencontainers.image.title="cdxgen" \
11+
org.opencontainers.image.description="Base Ruby builder. Do not use directly."
12+
13+
ARG RUBY_VERSION=3.4.3
14+
15+
ENV RUBY_VERSION=$RUBY_VERSION \
16+
RBENV_ROOT=/opt/.rbenv \
17+
MAKEFLAGS="-j$(nproc --ignore=2)" \
18+
PATH=/opt/bin:/opt/vendor/bin:${PATH}:/usr/local/bin/:/root/.local/bin:/root/.rbenv/bin:/root/.rbenv/versions/3.4.3/bin:
19+
20+
RUN microdnf install -y \
21+
gcc gcc-c++ make autoconf automake bison libtool \
22+
wget git-core bash glibc-common glibc-all-langpacks \
23+
openssl-devel readline-devel zlib-devel \
24+
ncurses-devel libffi-devel pcre2-devel rust \
25+
&& microdnf clean all \
26+
&& microdnf install -y epel-release \
27+
&& microdnf install --enablerepo=crb -y libyaml-devel \
28+
&& git clone https://github.com/rbenv/rbenv.git --depth=1 /opt/.rbenv \
29+
&& echo 'export PATH="/opt/.rbenv/bin:$PATH"' >> ~/.bashrc \
30+
&& echo 'eval "$(/opt/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc \
31+
&& echo 'export RBENV_ROOT=/opt/.rbenv' >> ~/.bashrc \
32+
&& echo 'export NVM_DIR=/opt/.nvm' >> ~/.bashrc \
33+
&& source ~/.bashrc \
34+
&& mkdir -p "/opt/.rbenv/plugins" \
35+
&& git clone https://github.com/rbenv/ruby-build.git --depth=1 "/opt/.rbenv/plugins/ruby-build" \
36+
&& rbenv install ${RUBY_VERSION} -- --disable-install-doc \
37+
&& rbenv global ${RUBY_VERSION} \
38+
&& rm -rf /opt/.rbenv/cache \
39+
&& ruby --version

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
"bugs": {
7676
"url": "https://github.com/cyclonedx/cdxgen/issues"
7777
},
78-
"packageManager": "pnpm@10.10.0",
78+
"packageManager": "pnpm@10.11.0",
7979
"lint-staged": {
8080
"*": "biome check --fix --no-errors-on-unmatched"
8181
},

0 commit comments

Comments
 (0)