diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 72ee9bc0..5c2791d7 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -229,12 +229,12 @@ jobs: pnpm: - 8 container: - - "ubuntu.dockerfile" - - "fedora.dockerfile" - - "arch.dockerfile" - - "ubuntu-mingw.dockerfile" - # - "fedora-mingw.dockerfile" - # - "arch-mingw.dockerfile" + - { file: "./dev/docker/ci/ubuntu-llvm.dockerfile", image: "setup-cpp-ubuntu-llvm", tag: "22.04-17" } + - { file: "./dev/docker/ci/fedora-llvm.dockerfile", image: "setup-cpp-fedora-llvm", tag: "40-17" } + - { file: "./dev/docker/ci/arch-llvm.dockerfile", image: "setup-cpp-arch-llvm", tag: "base-17" } + - { file: "./dev/docker/ci/ubuntu-mingw.dockerfile", image: "setup-cpp-ubuntu-mingw", tag: "22.04-13" } + # - { file: "./dev/docker/ci/fedora-mingw.dockerfile", image: "setup-cpp-fedora-mingw", tag: "40-13" } + # - { file: "./dev/docker/ci/arch-mingw.dockerfile", image: "setup-cpp-arch-mingw", tag: "base-13" } steps: - uses: actions/checkout@v4 with: @@ -245,10 +245,20 @@ jobs: with: name: dist - - name: Build - id: docker_build - run: | - docker build -f ./dev/docker/__tests__/${{ matrix.container }} -t setup-cpp . + - name: Login to Docker Hub + uses: docker/login-action@v3 + if: ${{ github.event_name != 'pull_request' }} + 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: if: startsWith(github.ref, 'refs/tags/') diff --git a/README.md b/README.md index 7a57e460..b9051418 100644 --- a/README.md +++ b/README.md @@ -211,7 +211,7 @@ If you want to build the ones included, then run: ```shell git clone --recurse-submodules https://github.com/aminya/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`. @@ -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 ```shell -docker run -it setup-cpp +docker run -it setup-cpp-ubuntu-llvm:22.04-17 ``` ### Inside Docker inside GitHub Actions diff --git a/dev/docker/__tests__/arch-mingw.dockerfile b/dev/docker/__tests__/arch-mingw.dockerfile deleted file mode 100644 index 03eff050..00000000 --- a/dev/docker/__tests__/arch-mingw.dockerfile +++ /dev/null @@ -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' diff --git a/dev/docker/__tests__/arch.dockerfile b/dev/docker/ci/arch-llvm.dockerfile similarity index 63% rename from dev/docker/__tests__/arch.dockerfile rename to dev/docker/ci/arch-llvm.dockerfile index 3b6bc740..e5ff0cd4 100644 --- a/dev/docker/__tests__/arch.dockerfile +++ b/dev/docker/ci/arch-llvm.dockerfile @@ -27,20 +27,3 @@ RUN pacman -Syuu --noconfirm && \ rm -rf /tmp/* 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"] diff --git a/dev/docker/__tests__/arch.yml b/dev/docker/ci/arch-llvm.yml similarity index 100% rename from dev/docker/__tests__/arch.yml rename to dev/docker/ci/arch-llvm.yml diff --git a/dev/docker/ci/arch-mingw.dockerfile b/dev/docker/ci/arch-mingw.dockerfile new file mode 100644 index 00000000..fc816d8a --- /dev/null +++ b/dev/docker/ci/arch-mingw.dockerfile @@ -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"] diff --git a/dev/docker/__tests__/arch-mingw.yml b/dev/docker/ci/arch-mingw.yml similarity index 100% rename from dev/docker/__tests__/arch-mingw.yml rename to dev/docker/ci/arch-mingw.yml diff --git a/dev/docker/__tests__/generate-docker-tests.mjs b/dev/docker/ci/docker-ci.mjs similarity index 51% rename from dev/docker/__tests__/generate-docker-tests.mjs rename to dev/docker/ci/docker-ci.mjs index c138b00b..b273f6ec 100644 --- a/dev/docker/__tests__/generate-docker-tests.mjs +++ b/dev/docker/ci/docker-ci.mjs @@ -1,12 +1,10 @@ import { readFile, writeFile } from "fs/promises" 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( - dockerFiles.map(async (dockerFile) => { - const dockerFileContent = await readFile(`./dev/docker/setup-cpp-${dockerFile}.dockerfile`, "utf-8") - const builderExample = await readFile(`./dev/docker/${dockerFile}.dockerfile`, "utf-8") - + names.map(async (name) => { + const dockerFileContent = await readFile(`./dev/docker/setup-cpp/setup-cpp-${name}.dockerfile`, "utf-8") const modifiedDockerFile = dockerFileContent // load the externally built 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 .replace(/# install setup-cpp\n\s*npm install -g setup-cpp.*/, "") - // concat the two files - const newDockerFileContent = `${modifiedDockerFile}\n${builderExample}` - - // write the new file in dev/docker/__tests__ - await writeFile(`./dev/docker/__tests__/${dockerFile}.dockerfile`, newDockerFileContent) + // write the new file in dev/docker/ci + await writeFile(`./dev/docker/ci/${name}.dockerfile`, modifiedDockerFile) }), ) } diff --git a/dev/docker/__tests__/fedora.dockerfile b/dev/docker/ci/fedora-llvm.dockerfile similarity index 58% rename from dev/docker/__tests__/fedora.dockerfile rename to dev/docker/ci/fedora-llvm.dockerfile index 21b13828..58249a5f 100644 --- a/dev/docker/__tests__/fedora.dockerfile +++ b/dev/docker/ci/fedora-llvm.dockerfile @@ -24,20 +24,3 @@ RUN dnf -y install nodejs npm && \ rm -rf /tmp/* 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"] diff --git a/dev/docker/__tests__/fedora.yml b/dev/docker/ci/fedora-llvm.yml similarity index 100% rename from dev/docker/__tests__/fedora.yml rename to dev/docker/ci/fedora-llvm.yml diff --git a/dev/docker/__tests__/fedora-mingw.dockerfile b/dev/docker/ci/fedora-mingw.dockerfile similarity index 75% rename from dev/docker/__tests__/fedora-mingw.dockerfile rename to dev/docker/ci/fedora-mingw.dockerfile index bb2c9f97..b1c1bedb 100644 --- a/dev/docker/__tests__/fedora-mingw.dockerfile +++ b/dev/docker/ci/fedora-mingw.dockerfile @@ -25,11 +25,3 @@ RUN dnf -y install nodejs npm && \ rm -rf /tmp/* 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' diff --git a/dev/docker/__tests__/fedora-mingw.yml b/dev/docker/ci/fedora-mingw.yml similarity index 100% rename from dev/docker/__tests__/fedora-mingw.yml rename to dev/docker/ci/fedora-mingw.yml diff --git a/dev/docker/__tests__/ubuntu.dockerfile b/dev/docker/ci/ubuntu-llvm.dockerfile similarity index 65% rename from dev/docker/__tests__/ubuntu.dockerfile rename to dev/docker/ci/ubuntu-llvm.dockerfile index 4e0ffd80..aed4d2b1 100644 --- a/dev/docker/__tests__/ubuntu.dockerfile +++ b/dev/docker/ci/ubuntu-llvm.dockerfile @@ -30,20 +30,3 @@ RUN apt-get update -qq && \ rm -rf /tmp/* 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"] diff --git a/dev/docker/__tests__/ubuntu.yml b/dev/docker/ci/ubuntu-llvm.yml similarity index 100% rename from dev/docker/__tests__/ubuntu.yml rename to dev/docker/ci/ubuntu-llvm.yml diff --git a/dev/docker/__tests__/ubuntu-mingw.dockerfile b/dev/docker/ci/ubuntu-mingw.dockerfile similarity index 80% rename from dev/docker/__tests__/ubuntu-mingw.dockerfile rename to dev/docker/ci/ubuntu-mingw.dockerfile index 9737e97a..6cba82a1 100644 --- a/dev/docker/__tests__/ubuntu-mingw.dockerfile +++ b/dev/docker/ci/ubuntu-mingw.dockerfile @@ -31,11 +31,3 @@ RUN apt-get update -qq && \ rm -rf /tmp/* 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' diff --git a/dev/docker/__tests__/ubuntu-mingw.yml b/dev/docker/ci/ubuntu-mingw.yml similarity index 100% rename from dev/docker/__tests__/ubuntu-mingw.yml rename to dev/docker/ci/ubuntu-mingw.yml diff --git a/dev/docker/arch-mingw.dockerfile b/dev/docker/examples/arch-mingw.dockerfile similarity index 100% rename from dev/docker/arch-mingw.dockerfile rename to dev/docker/examples/arch-mingw.dockerfile diff --git a/dev/docker/arch.dockerfile b/dev/docker/examples/arch.dockerfile similarity index 100% rename from dev/docker/arch.dockerfile rename to dev/docker/examples/arch.dockerfile diff --git a/dev/docker/fedora-mingw.dockerfile b/dev/docker/examples/fedora-mingw.dockerfile similarity index 100% rename from dev/docker/fedora-mingw.dockerfile rename to dev/docker/examples/fedora-mingw.dockerfile diff --git a/dev/docker/fedora.dockerfile b/dev/docker/examples/fedora.dockerfile similarity index 100% rename from dev/docker/fedora.dockerfile rename to dev/docker/examples/fedora.dockerfile diff --git a/dev/docker/ubuntu-mingw.dockerfile b/dev/docker/examples/ubuntu-mingw.dockerfile similarity index 100% rename from dev/docker/ubuntu-mingw.dockerfile rename to dev/docker/examples/ubuntu-mingw.dockerfile diff --git a/dev/docker/ubuntu.dockerfile b/dev/docker/examples/ubuntu.dockerfile similarity index 100% rename from dev/docker/ubuntu.dockerfile rename to dev/docker/examples/ubuntu.dockerfile diff --git a/dev/docker/setup-cpp-arch.dockerfile b/dev/docker/setup-cpp/setup-cpp-arch-llvm.dockerfile similarity index 100% rename from dev/docker/setup-cpp-arch.dockerfile rename to dev/docker/setup-cpp/setup-cpp-arch-llvm.dockerfile diff --git a/dev/docker/setup-cpp-arch-mingw.dockerfile b/dev/docker/setup-cpp/setup-cpp-arch-mingw.dockerfile similarity index 100% rename from dev/docker/setup-cpp-arch-mingw.dockerfile rename to dev/docker/setup-cpp/setup-cpp-arch-mingw.dockerfile diff --git a/dev/docker/setup-cpp-fedora.dockerfile b/dev/docker/setup-cpp/setup-cpp-fedora-llvm.dockerfile similarity index 100% rename from dev/docker/setup-cpp-fedora.dockerfile rename to dev/docker/setup-cpp/setup-cpp-fedora-llvm.dockerfile diff --git a/dev/docker/setup-cpp-fedora-mingw.dockerfile b/dev/docker/setup-cpp/setup-cpp-fedora-mingw.dockerfile similarity index 100% rename from dev/docker/setup-cpp-fedora-mingw.dockerfile rename to dev/docker/setup-cpp/setup-cpp-fedora-mingw.dockerfile diff --git a/dev/docker/setup-cpp-ubuntu-20.0.4.dockerfile b/dev/docker/setup-cpp/setup-cpp-ubuntu-20.0.4-llvm.dockerfile similarity index 100% rename from dev/docker/setup-cpp-ubuntu-20.0.4.dockerfile rename to dev/docker/setup-cpp/setup-cpp-ubuntu-20.0.4-llvm.dockerfile diff --git a/dev/docker/setup-cpp-ubuntu.dockerfile b/dev/docker/setup-cpp/setup-cpp-ubuntu-llvm.dockerfile similarity index 100% rename from dev/docker/setup-cpp-ubuntu.dockerfile rename to dev/docker/setup-cpp/setup-cpp-ubuntu-llvm.dockerfile diff --git a/dev/docker/setup-cpp-ubuntu-mingw.dockerfile b/dev/docker/setup-cpp/setup-cpp-ubuntu-mingw.dockerfile similarity index 100% rename from dev/docker/setup-cpp-ubuntu-mingw.dockerfile rename to dev/docker/setup-cpp/setup-cpp-ubuntu-mingw.dockerfile diff --git a/package.json b/package.json index a3f24e7c..2b1844a8 100644 --- a/package.json +++ b/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.prettier": "prettier . --check", "test": "jest --runInBand --forceExit --coverage", - "build.docker_tests": "node ./dev/docker/__tests__/generate-docker-tests.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" + "build.docker-ci": "node ./dev/docker/ci/docker-ci.mjs" }, "prettier": "prettier-config-atomic", "devDependencies": { diff --git a/tsconfig.json b/tsconfig.json index f0b2d449..8eb64bfa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -33,7 +33,7 @@ "./src", "dev/scripts", "packages/untildify-user/untildify.ts", - "dev/docker/__tests__/generate-docker-tests.mjs", + "dev/docker/ci/docker-ci.mjs", "./jest.config.ts" ] }