mirror of https://github.com/aminya/setup-cpp
feat: build and publish docker images
This commit is contained in:
parent
2908244529
commit
d6950a396f
|
@ -229,12 +229,12 @@ jobs:
|
||||||
pnpm:
|
pnpm:
|
||||||
- 8
|
- 8
|
||||||
container:
|
container:
|
||||||
- "ubuntu.dockerfile"
|
- { file: "./dev/docker/ci/ubuntu-llvm.dockerfile", image: "setup-cpp-ubuntu-llvm", tag: "22.04-17" }
|
||||||
- "fedora.dockerfile"
|
- { file: "./dev/docker/ci/fedora-llvm.dockerfile", image: "setup-cpp-fedora-llvm", tag: "40-17" }
|
||||||
- "arch.dockerfile"
|
- { file: "./dev/docker/ci/arch-llvm.dockerfile", image: "setup-cpp-arch-llvm", tag: "base-17" }
|
||||||
- "ubuntu-mingw.dockerfile"
|
- { file: "./dev/docker/ci/ubuntu-mingw.dockerfile", image: "setup-cpp-ubuntu-mingw", tag: "22.04-13" }
|
||||||
# - "fedora-mingw.dockerfile"
|
# - { file: "./dev/docker/ci/fedora-mingw.dockerfile", image: "setup-cpp-fedora-mingw", tag: "40-13" }
|
||||||
# - "arch-mingw.dockerfile"
|
# - { file: "./dev/docker/ci/arch-mingw.dockerfile", image: "setup-cpp-arch-mingw", tag: "base-13" }
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
|
@ -245,10 +245,20 @@ jobs:
|
||||||
with:
|
with:
|
||||||
name: dist
|
name: dist
|
||||||
|
|
||||||
- name: Build
|
- name: Login to Docker Hub
|
||||||
id: docker_build
|
uses: docker/login-action@v3
|
||||||
run: |
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
docker build -f ./dev/docker/__tests__/${{ matrix.container }} -t setup-cpp .
|
with:
|
||||||
|
username: ${{ vars.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ${{ matrix.container.file }}
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ vars.DOCKERHUB_USERNAME }}/${{ matrix.container.image }}:${{ matrix.container.tag }}
|
||||||
|
|
||||||
Release:
|
Release:
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
|
|
@ -211,7 +211,7 @@ If you want to build the ones included, then run:
|
||||||
```shell
|
```shell
|
||||||
git clone --recurse-submodules https://github.com/aminya/setup-cpp
|
git clone --recurse-submodules https://github.com/aminya/setup-cpp
|
||||||
cd ./setup-cpp
|
cd ./setup-cpp
|
||||||
docker build -f ./dev/docker/setup-cpp-ubuntu.dockerfile -t setup-cpp-ubuntu .
|
docker build -f ./dev/docker/setup-cpp/setup-cpp-ubuntu.dockerfile -t setup-cpp-ubuntu-llvm:22.04-17 ./
|
||||||
```
|
```
|
||||||
|
|
||||||
Where you should use the path to the dockerfile after `-f`.
|
Where you should use the path to the dockerfile after `-f`.
|
||||||
|
@ -219,7 +219,7 @@ Where you should use the path to the dockerfile after `-f`.
|
||||||
After build, run the following to start an interactive shell in your container
|
After build, run the following to start an interactive shell in your container
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker run -it setup-cpp
|
docker run -it setup-cpp-ubuntu-llvm:22.04-17
|
||||||
```
|
```
|
||||||
|
|
||||||
### Inside Docker inside GitHub Actions
|
### Inside Docker inside GitHub Actions
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
## base image
|
|
||||||
FROM archlinux:base-devel as setup-cpp-arch-mingw
|
|
||||||
|
|
||||||
COPY "./dist/legacy" "/usr/lib/setup-cpp/"
|
|
||||||
|
|
||||||
# install git
|
|
||||||
RUN pacman -Syuu --noconfirm && \
|
|
||||||
pacman-db-upgrade && \
|
|
||||||
pacman -S --noconfirm --needed git
|
|
||||||
# install yay
|
|
||||||
RUN useradd -m -G nobody -s /bin/bash yay && passwd -d yay && echo "yay ALL=(ALL) ALL" >> /etc/sudoers
|
|
||||||
RUN git clone --depth 1 https://aur.archlinux.org/yay.git /opt/yay
|
|
||||||
WORKDIR /opt/yay
|
|
||||||
RUN chown -R yay:root . && chmod -R 775 .
|
|
||||||
USER yay
|
|
||||||
WORKDIR /opt/yay
|
|
||||||
RUN makepkg -si --noprogressbar --noconfirm
|
|
||||||
## clean up
|
|
||||||
USER root
|
|
||||||
WORKDIR /
|
|
||||||
RUN rm -rf /opt/yay
|
|
||||||
|
|
||||||
RUN pacman -Syuu --noconfirm && \
|
|
||||||
pacman-db-upgrade && \
|
|
||||||
# install nodejs
|
|
||||||
pacman -S --noconfirm --needed nodejs npm && \
|
|
||||||
# install the compiler and tools
|
|
||||||
node /usr/lib/setup-cpp/setup-cpp.js \
|
|
||||||
--compiler mingw \
|
|
||||||
--cmake true \
|
|
||||||
--ninja true \
|
|
||||||
--task true \
|
|
||||||
--vcpkg true \
|
|
||||||
--python true \
|
|
||||||
--make true \
|
|
||||||
--cppcheck true \
|
|
||||||
--gcovr true \
|
|
||||||
--doxygen true \
|
|
||||||
--ccache true && \
|
|
||||||
# arch cleanup
|
|
||||||
pacman -Scc --noconfirm && \
|
|
||||||
rm -rf /var/cache/pacman/pkg/* && \
|
|
||||||
rm -rf /tmp/*
|
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash"]
|
|
||||||
|
|
||||||
#### Cross Building (example)
|
|
||||||
FROM setup-cpp-arch-mingw AS builder-mingw
|
|
||||||
|
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
|
||||||
WORKDIR /home/app
|
|
||||||
RUN bash -c 'source ~/.cpprc \
|
|
||||||
&& task build_cross_mingw'
|
|
|
@ -27,20 +27,3 @@ RUN pacman -Syuu --noconfirm && \
|
||||||
rm -rf /tmp/*
|
rm -rf /tmp/*
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash"]
|
ENTRYPOINT ["/bin/bash"]
|
||||||
|
|
||||||
#### Building (example)
|
|
||||||
FROM setup-cpp-arch AS builder
|
|
||||||
|
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
|
||||||
WORKDIR /home/app
|
|
||||||
RUN bash -c 'source ~/.cpprc \
|
|
||||||
&& task build'
|
|
||||||
|
|
||||||
#### Running environment
|
|
||||||
# use a fresh image as the runner
|
|
||||||
FROM archlinux:base as runner
|
|
||||||
|
|
||||||
# copy the built binaries and their runtime dependencies
|
|
||||||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
|
||||||
WORKDIR /home/app/
|
|
||||||
ENTRYPOINT ["./my_exe"]
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
## base image
|
||||||
|
FROM archlinux:base as setup-cpp-arch-mingw
|
||||||
|
|
||||||
|
COPY "./dist/legacy" "/usr/lib/setup-cpp/"
|
||||||
|
|
||||||
|
RUN pacman -Syuu --noconfirm && \
|
||||||
|
pacman-db-upgrade && \
|
||||||
|
# install nodejs
|
||||||
|
pacman -S --noconfirm --needed nodejs npm && \
|
||||||
|
|
||||||
|
# install the compiler and tools
|
||||||
|
node /usr/lib/setup-cpp/setup-cpp.js \
|
||||||
|
--compiler mingw \
|
||||||
|
--cmake true \
|
||||||
|
--ninja true \
|
||||||
|
--task true \
|
||||||
|
--vcpkg true \
|
||||||
|
--python true \
|
||||||
|
--make true \
|
||||||
|
--cppcheck true \
|
||||||
|
--gcovr true \
|
||||||
|
--doxygen true \
|
||||||
|
--ccache true && \
|
||||||
|
# arch cleanup
|
||||||
|
pacman -Scc --noconfirm && \
|
||||||
|
rm -rf /var/cache/pacman/pkg/* && \
|
||||||
|
rm -rf /tmp/*
|
||||||
|
|
||||||
|
ENTRYPOINT ["/bin/bash"]
|
|
@ -1,12 +1,10 @@
|
||||||
import { readFile, writeFile } from "fs/promises"
|
import { readFile, writeFile } from "fs/promises"
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const dockerFiles = ["ubuntu", "arch", "fedora", "ubuntu-mingw", "arch-mingw", "fedora-mingw"]
|
const names = ["ubuntu-llvm", "arch-llvm", "fedora-llvm", "ubuntu-mingw", "arch-mingw", "fedora-mingw"]
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
dockerFiles.map(async (dockerFile) => {
|
names.map(async (name) => {
|
||||||
const dockerFileContent = await readFile(`./dev/docker/setup-cpp-${dockerFile}.dockerfile`, "utf-8")
|
const dockerFileContent = await readFile(`./dev/docker/setup-cpp/setup-cpp-${name}.dockerfile`, "utf-8")
|
||||||
const builderExample = await readFile(`./dev/docker/${dockerFile}.dockerfile`, "utf-8")
|
|
||||||
|
|
||||||
const modifiedDockerFile = dockerFileContent
|
const modifiedDockerFile = dockerFileContent
|
||||||
// load the externally built setup-cpp
|
// load the externally built setup-cpp
|
||||||
.replace(/FROM (.*)/g, `FROM $1\n\nCOPY "./dist/legacy" "/usr/lib/setup-cpp/"`)
|
.replace(/FROM (.*)/g, `FROM $1\n\nCOPY "./dist/legacy" "/usr/lib/setup-cpp/"`)
|
||||||
|
@ -14,11 +12,8 @@ async function main() {
|
||||||
// remove the npm install line
|
// remove the npm install line
|
||||||
.replace(/# install setup-cpp\n\s*npm install -g setup-cpp.*/, "")
|
.replace(/# install setup-cpp\n\s*npm install -g setup-cpp.*/, "")
|
||||||
|
|
||||||
// concat the two files
|
// write the new file in dev/docker/ci
|
||||||
const newDockerFileContent = `${modifiedDockerFile}\n${builderExample}`
|
await writeFile(`./dev/docker/ci/${name}.dockerfile`, modifiedDockerFile)
|
||||||
|
|
||||||
// write the new file in dev/docker/__tests__
|
|
||||||
await writeFile(`./dev/docker/__tests__/${dockerFile}.dockerfile`, newDockerFileContent)
|
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
}
|
}
|
|
@ -24,20 +24,3 @@ RUN dnf -y install nodejs npm && \
|
||||||
rm -rf /tmp/*
|
rm -rf /tmp/*
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash"]
|
ENTRYPOINT ["/bin/bash"]
|
||||||
|
|
||||||
#### Building (example)
|
|
||||||
FROM setup-cpp-fedora AS builder
|
|
||||||
|
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
|
||||||
WORKDIR /home/app
|
|
||||||
RUN bash -c 'source ~/.cpprc \
|
|
||||||
&& task build'
|
|
||||||
|
|
||||||
#### Running environment
|
|
||||||
# use a fresh image as the runner
|
|
||||||
FROM fedora:40 as runner
|
|
||||||
|
|
||||||
# copy the built binaries and their runtime dependencies
|
|
||||||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
|
||||||
WORKDIR /home/app/
|
|
||||||
ENTRYPOINT ["./my_exe"]
|
|
|
@ -25,11 +25,3 @@ RUN dnf -y install nodejs npm && \
|
||||||
rm -rf /tmp/*
|
rm -rf /tmp/*
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash"]
|
ENTRYPOINT ["/bin/bash"]
|
||||||
|
|
||||||
#### Cross Building (example)
|
|
||||||
FROM setup-cpp-fedora-mingw AS builder-mingw
|
|
||||||
|
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
|
||||||
WORKDIR /home/app
|
|
||||||
RUN bash -c 'source ~/.cpprc \
|
|
||||||
&& task build_cross_mingw'
|
|
|
@ -30,20 +30,3 @@ RUN apt-get update -qq && \
|
||||||
rm -rf /tmp/*
|
rm -rf /tmp/*
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash"]
|
ENTRYPOINT ["/bin/bash"]
|
||||||
|
|
||||||
#### Building (example)
|
|
||||||
FROM setup-cpp-ubuntu AS builder
|
|
||||||
|
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
|
||||||
WORKDIR /home/app
|
|
||||||
RUN bash -c 'source ~/.cpprc \
|
|
||||||
&& task build'
|
|
||||||
|
|
||||||
#### Running environment
|
|
||||||
# use a fresh image as the runner
|
|
||||||
FROM ubuntu:22.04 as runner
|
|
||||||
|
|
||||||
# copy the built binaries and their runtime dependencies
|
|
||||||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
|
||||||
WORKDIR /home/app/
|
|
||||||
ENTRYPOINT ["./my_exe"]
|
|
|
@ -31,11 +31,3 @@ RUN apt-get update -qq && \
|
||||||
rm -rf /tmp/*
|
rm -rf /tmp/*
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash"]
|
ENTRYPOINT ["/bin/bash"]
|
||||||
|
|
||||||
#### Cross Building (example)
|
|
||||||
FROM setup-cpp-ubuntu-mingw AS builder-mingw
|
|
||||||
|
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
|
||||||
WORKDIR /home/app
|
|
||||||
RUN bash -c 'source ~/.cpprc \
|
|
||||||
&& task build_cross_mingw'
|
|
14
package.json
14
package.json
|
@ -55,19 +55,7 @@
|
||||||
"test.lint.eslint": "eslint **/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml} --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/",
|
"test.lint.eslint": "eslint **/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml} --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/",
|
||||||
"test.lint.prettier": "prettier . --check",
|
"test.lint.prettier": "prettier . --check",
|
||||||
"test": "jest --runInBand --forceExit --coverage",
|
"test": "jest --runInBand --forceExit --coverage",
|
||||||
"build.docker_tests": "node ./dev/docker/__tests__/generate-docker-tests.mjs",
|
"build.docker-ci": "node ./dev/docker/ci/docker-ci.mjs"
|
||||||
"build.docker.arch": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/arch.dockerfile -t setup-cpp:arch .",
|
|
||||||
"build.docker.fedora": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/fedora.dockerfile -t setup-cpp:fedora .",
|
|
||||||
"build.docker.ubuntu": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/ubuntu.dockerfile -t setup-cpp:ubuntu .",
|
|
||||||
"build.docker.arch.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/arch-mingw.dockerfile -t setup-cpp:arch-mingw .",
|
|
||||||
"build.docker.fedora.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/fedora-mingw.dockerfile -t setup-cpp:fedora-mingw .",
|
|
||||||
"build.docker.ubuntu.mingw": "pnpm build.docker_tests && docker build -f ./dev/docker/__tests__/ubuntu-mingw.dockerfile -t setup-cpp:ubuntu-mingw .",
|
|
||||||
"test.docker.arch": "pnpm build.docker.arch && container-structure-test test --image setup-cpp:arch --config ./dev/docker/__tests__/arch.yml",
|
|
||||||
"test.docker.fedora": "pnpm build.docker.fedora && container-structure-test test --image setup-cpp:fedora --config ./dev/docker/__tests__/fedora.yml",
|
|
||||||
"test.docker.ubuntu": "pnpm build.docker.ubuntu && container-structure-test test --image setup-cpp:ubuntu --config ./dev/docker/__tests__/ubuntu.yml",
|
|
||||||
"test.docker.arch.mingw": "pnpm build.docker.arch.mingw && container-structure-test test --image setup-cpp:arch-mingw --config ./dev/docker/__tests__/arch-mingw.yml",
|
|
||||||
"test.docker.fedora.mingw": "pnpm build.docker.fedora.mingw && container-structure-test test --image setup-cpp:fedora-mingw --config ./dev/docker/__tests__/fedora-mingw.yml",
|
|
||||||
"test.docker.ubuntu.mingw": "pnpm build.docker.ubuntu.mingw && container-structure-test test --image setup-cpp:ubuntu-mingw --config ./dev/docker/__tests__/ubuntu-mingw.yml"
|
|
||||||
},
|
},
|
||||||
"prettier": "prettier-config-atomic",
|
"prettier": "prettier-config-atomic",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
"./src",
|
"./src",
|
||||||
"dev/scripts",
|
"dev/scripts",
|
||||||
"packages/untildify-user/untildify.ts",
|
"packages/untildify-user/untildify.ts",
|
||||||
"dev/docker/__tests__/generate-docker-tests.mjs",
|
"dev/docker/ci/docker-ci.mjs",
|
||||||
"./jest.config.ts"
|
"./jest.config.ts"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue