diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 5202f117..5e1cde63 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -1,6 +1,6 @@ --- name: Build Release -run-name: Build Release (${{ inputs.releaseVersion }}) +run-name: Build Release (${{ inputs.releaseTag }}) on: workflow_call: inputs: @@ -31,7 +31,7 @@ env: RELEASE_UPLOAD_URL: ${{ inputs.releaseUploadUrl }} RELEASE_TAG: ${{ inputs.releaseTag }} PACKAGE_VERSION: ${{ inputs.packageVersion }} - DEB_REVISION: ${{ inputs.revision }} + DEB_REVISION: ${{ inputs.debRevision }} RPM_SNAPSHOT: ${{ inputs.rpmSnapshot }} PROJECT_NAME: cloudtruth RUST_BACKTRACE: 1 @@ -65,15 +65,14 @@ jobs: env: TARGET: ${{ matrix.target }} + # strip debug info from binaries + RUSTFLAGS: '-C link-arg=-s' steps: - uses: actions/checkout@v3 with: fetch-depth: 1 - - run: xtask/scripts/install-build-packages-linux.sh - if: contains(runner.os, 'Linux') - - run: xtask/scripts/install-rust.sh - uses: Swatinem/rust-cache@v2 @@ -98,10 +97,6 @@ jobs: run: cargo build --release --target $TARGET --all-features --bin cloudtruth if: ${{ ! contains(runner.os, 'Linux') }} - - name: Strip binaries - run: xtask/scripts/strip.sh - if: ${{ !contains(runner.os, 'Windows') }} - - name: Build archive run: xtask/scripts/build-release-archive.sh @@ -196,6 +191,7 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] env: ARCHIVE_FILE: integration-test-${{matrix.os}}.tar.zst + RUSTFLAGS: '-C link-arg=-s' steps: - uses: actions/checkout@v3 with: diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml index 56a8219a..d41162b2 100644 --- a/.github/workflows/test-release.yml +++ b/.github/workflows/test-release.yml @@ -36,7 +36,7 @@ jobs: JSON_FILE=xtask/gha-matrices/release-tests.json echo "matrix=$(cat $JSON_FILE)" >> $GITHUB_OUTPUT test-release: - name: ${{ matrix.os }}-${{ matrix.version }} + name: ${{ matrix.display_name }} runs-on: ${{ matrix.runner }} needs: [ matrix ] defaults: @@ -60,7 +60,7 @@ jobs: CLOUDTRUTH_API_KEY: ${{ secrets.CLOUDTRUTH_API_KEY }} CT_TEST_PROJECT: TruthStrap CT_TEST_PARAM: INTEGRATION_TEST_RESULT - CT_TEST_VALUE: Speicla + CT_TEST_VALUE: Speicla steps: - uses: actions/checkout@v3 @@ -70,16 +70,30 @@ jobs: - name: docker if: matrix.install_type == 'docker' run: | - VERSION='${{ matrix.os }}-${{ matrix.version }}' - TAG="cloudtruth:$VERSION" - OUT_LOG="$TAG-output.txt" - docker build . \ + IMAGE='cloudtruth/${{ matrix.os }}' + VERSION='${{ matrix.version }}' + DOCKER_FILE='${{ matrix.dockerfile }}' + DOCKER_PLATFORM='${{ matrix.platform }}' + TAG="${IMAGE}:${VERSION}" + OUT_LOG='docker_build.log' + # install emulators for ARM if needed + case "$DOCKER_PLATFORM" in + *arm64*) + docker run --privileged --rm tonistiigi/binfmt --install arm64 + ;; + *arm*) + docker run --privileged --rm tonistiigi/binfmt --install arm + ;; + esac + docker buildx build . \ + ${DOCKER_PLATFORM:+ --platform "${DOCKER_PLATFORM}"} \ --build-arg DOWNLOAD_AUTH_TOKEN="${CT_DOWNLOAD_AUTH_TOKEN}" \ --build-arg DOWNLOAD_RELEASE_ID="${CT_DOWNLOAD_RELEASE_ID}" \ --build-arg DOWNLOAD_VERSION="${CT_DOWNLOAD_VERSION}" \ - -f "xtask/docker/Dockerfile.$VERSION" \ + -f "xtask/docker/${DOCKER_FILE}" \ -t "$TAG" docker run --rm \ + ${DOCKER_PLATFORM:+ --platform "${DOCKER_PLATFORM}"} \ -i --log-driver=none -a stdout -a stderr \ -e CLOUDTRUTH_API_KEY \ ${CLOUDTRUTH_SERVER_URL:+ -e CLOUDTRUTH_SERVER_URL} \ diff --git a/install.sh b/install.sh index 7246a7ec..05916860 100755 --- a/install.sh +++ b/install.sh @@ -204,11 +204,25 @@ download_draft() { # alpine, macos - no package format yet, use generic binary if [ "${PKG}" = "apk" ] || [ "${PKG}" = "macos" ]; then - if [ "${PKG}" = "macos" ]; then - if [ "${ARCH}" = "arm64" ]; then + # normalize CPU arch + case $ARCH in + arm64 | armv8l | armv8b) ARCH="aarch64" - fi + ;; + armv7l) + ARCH="armv7" + ;; + armv6l) + ARCH="arm" + ;; + esac + # determine taret name from OS (default to linux) + if [ "${OS}" = "Darwin" ]; then TARGET_NAME=apple-darwin + elif [ "${ARCH}" = "aarch64" ]; then + TARGET_NAME=unknown-linux-musl + elif [ "${ARCH}" = "arm" ] || [ "${ARCH}" = "armv7" ]; then + TARGET_NAME=unknown-linux-musleabihf else TARGET_NAME=unknown-linux-musl fi diff --git a/xtask/config.yaml b/xtask/config.yaml index 200cdebf..58388811 100644 --- a/xtask/config.yaml +++ b/xtask/config.yaml @@ -1,8 +1,10 @@ --- release-builds: - { runner: ubuntu-latest , target: x86_64-unknown-linux-musl } - - { runner: ubuntu-latest , target: arm-unknown-linux-gnueabihf } - - { runner: ubuntu-latest , target: aarch64-unknown-linux-gnu } + - { runner: ubuntu-latest , target: arm-unknown-linux-musleabihf } + - { runner: ubuntu-latest , target: armv7-unknown-linux-musleabihf } + - { runner: ubuntu-latest , target: aarch64-unknown-linux-musl } + - { runner: ubuntu-latest , target: x86_64-unknown-linux-gnu } - { runner: macos-latest , target: x86_64-apple-darwin } - { runner: macos-latest , target: aarch64-apple-darwin } - { runner: windows-latest , target: x86_64-pc-windows-msvc } @@ -10,10 +12,14 @@ release-tests: - os: alpine type: docker versions: + - "3.18" - "3.17" - "3.16" - - "3.15" - - "3.14" + platforms: + - linux/amd64 + - linux/arm64/v8 + - linux/arm/v7 + - linux/arm/v6 - os: rockylinux type: docker versions: @@ -36,8 +42,6 @@ release-tests: - lunar - kinetic - jammy - - focal - - bionic - os: macos type: shell versions: diff --git a/xtask/docker/Dockerfile.alpine-3.14 b/xtask/docker/Dockerfile.alpine.3.16.linux-amd64 similarity index 92% rename from xtask/docker/Dockerfile.alpine-3.14 rename to xtask/docker/Dockerfile.alpine.3.16.linux-amd64 index 7ae91dff..a0055bd3 100644 --- a/xtask/docker/Dockerfile.alpine-3.14 +++ b/xtask/docker/Dockerfile.alpine.3.16.linux-amd64 @@ -1,4 +1,4 @@ -FROM alpine:3.14 +FROM --platform=linux/amd64 alpine:3.16 ARG DOWNLOAD_AUTH_TOKEN="" ARG DOWNLOAD_RELEASE_ID="" ARG DOWNLOAD_VERSION="" diff --git a/xtask/docker/Dockerfile.alpine-3.17 b/xtask/docker/Dockerfile.alpine.3.16.linux-arm-v6 similarity index 92% rename from xtask/docker/Dockerfile.alpine-3.17 rename to xtask/docker/Dockerfile.alpine.3.16.linux-arm-v6 index 3977d65a..14537b42 100644 --- a/xtask/docker/Dockerfile.alpine-3.17 +++ b/xtask/docker/Dockerfile.alpine.3.16.linux-arm-v6 @@ -1,4 +1,4 @@ -FROM alpine:3.17 +FROM --platform=linux/arm/v6 alpine:3.16 ARG DOWNLOAD_AUTH_TOKEN="" ARG DOWNLOAD_RELEASE_ID="" ARG DOWNLOAD_VERSION="" diff --git a/xtask/docker/Dockerfile.alpine.3.16.linux-arm-v7 b/xtask/docker/Dockerfile.alpine.3.16.linux-arm-v7 new file mode 100644 index 00000000..00472d52 --- /dev/null +++ b/xtask/docker/Dockerfile.alpine.3.16.linux-arm-v7 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm/v7 alpine:3.16 +ARG DOWNLOAD_AUTH_TOKEN="" +ARG DOWNLOAD_RELEASE_ID="" +ARG DOWNLOAD_VERSION="" +ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} +ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} +ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} +COPY ./install.sh /tmp/ctinstall.sh +RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ + --version "${CT_DOWNLOAD_VERSION}" \ + ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} +CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.alpine.3.16.linux-arm64-v8 b/xtask/docker/Dockerfile.alpine.3.16.linux-arm64-v8 new file mode 100644 index 00000000..fe48d82e --- /dev/null +++ b/xtask/docker/Dockerfile.alpine.3.16.linux-arm64-v8 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm64/v8 alpine:3.16 +ARG DOWNLOAD_AUTH_TOKEN="" +ARG DOWNLOAD_RELEASE_ID="" +ARG DOWNLOAD_VERSION="" +ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} +ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} +ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} +COPY ./install.sh /tmp/ctinstall.sh +RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ + --version "${CT_DOWNLOAD_VERSION}" \ + ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} +CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.alpine-3.15 b/xtask/docker/Dockerfile.alpine.3.17.linux-amd64 similarity index 92% rename from xtask/docker/Dockerfile.alpine-3.15 rename to xtask/docker/Dockerfile.alpine.3.17.linux-amd64 index 3ff82a13..56e5af94 100644 --- a/xtask/docker/Dockerfile.alpine-3.15 +++ b/xtask/docker/Dockerfile.alpine.3.17.linux-amd64 @@ -1,4 +1,4 @@ -FROM alpine:3.15 +FROM --platform=linux/amd64 alpine:3.17 ARG DOWNLOAD_AUTH_TOKEN="" ARG DOWNLOAD_RELEASE_ID="" ARG DOWNLOAD_VERSION="" diff --git a/xtask/docker/Dockerfile.alpine.3.17.linux-arm-v6 b/xtask/docker/Dockerfile.alpine.3.17.linux-arm-v6 new file mode 100644 index 00000000..522b38a6 --- /dev/null +++ b/xtask/docker/Dockerfile.alpine.3.17.linux-arm-v6 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm/v6 alpine:3.17 +ARG DOWNLOAD_AUTH_TOKEN="" +ARG DOWNLOAD_RELEASE_ID="" +ARG DOWNLOAD_VERSION="" +ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} +ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} +ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} +COPY ./install.sh /tmp/ctinstall.sh +RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ + --version "${CT_DOWNLOAD_VERSION}" \ + ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} +CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.alpine.3.17.linux-arm-v7 b/xtask/docker/Dockerfile.alpine.3.17.linux-arm-v7 new file mode 100644 index 00000000..5f60511a --- /dev/null +++ b/xtask/docker/Dockerfile.alpine.3.17.linux-arm-v7 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm/v7 alpine:3.17 +ARG DOWNLOAD_AUTH_TOKEN="" +ARG DOWNLOAD_RELEASE_ID="" +ARG DOWNLOAD_VERSION="" +ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} +ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} +ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} +COPY ./install.sh /tmp/ctinstall.sh +RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ + --version "${CT_DOWNLOAD_VERSION}" \ + ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} +CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.alpine.3.17.linux-arm64-v8 b/xtask/docker/Dockerfile.alpine.3.17.linux-arm64-v8 new file mode 100644 index 00000000..e4c06ad2 --- /dev/null +++ b/xtask/docker/Dockerfile.alpine.3.17.linux-arm64-v8 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm64/v8 alpine:3.17 +ARG DOWNLOAD_AUTH_TOKEN="" +ARG DOWNLOAD_RELEASE_ID="" +ARG DOWNLOAD_VERSION="" +ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} +ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} +ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} +COPY ./install.sh /tmp/ctinstall.sh +RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ + --version "${CT_DOWNLOAD_VERSION}" \ + ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} +CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.alpine-3.16 b/xtask/docker/Dockerfile.alpine.3.18.linux-amd64 similarity index 92% rename from xtask/docker/Dockerfile.alpine-3.16 rename to xtask/docker/Dockerfile.alpine.3.18.linux-amd64 index 811b9b3d..d5dc58a8 100644 --- a/xtask/docker/Dockerfile.alpine-3.16 +++ b/xtask/docker/Dockerfile.alpine.3.18.linux-amd64 @@ -1,4 +1,4 @@ -FROM alpine:3.16 +FROM --platform=linux/amd64 alpine:3.18 ARG DOWNLOAD_AUTH_TOKEN="" ARG DOWNLOAD_RELEASE_ID="" ARG DOWNLOAD_VERSION="" diff --git a/xtask/docker/Dockerfile.alpine.3.18.linux-arm-v6 b/xtask/docker/Dockerfile.alpine.3.18.linux-arm-v6 new file mode 100644 index 00000000..c94f9c5b --- /dev/null +++ b/xtask/docker/Dockerfile.alpine.3.18.linux-arm-v6 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm/v6 alpine:3.18 +ARG DOWNLOAD_AUTH_TOKEN="" +ARG DOWNLOAD_RELEASE_ID="" +ARG DOWNLOAD_VERSION="" +ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} +ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} +ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} +COPY ./install.sh /tmp/ctinstall.sh +RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ + --version "${CT_DOWNLOAD_VERSION}" \ + ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} +CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.alpine.3.18.linux-arm-v7 b/xtask/docker/Dockerfile.alpine.3.18.linux-arm-v7 new file mode 100644 index 00000000..8d94aa08 --- /dev/null +++ b/xtask/docker/Dockerfile.alpine.3.18.linux-arm-v7 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm/v7 alpine:3.18 +ARG DOWNLOAD_AUTH_TOKEN="" +ARG DOWNLOAD_RELEASE_ID="" +ARG DOWNLOAD_VERSION="" +ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} +ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} +ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} +COPY ./install.sh /tmp/ctinstall.sh +RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ + --version "${CT_DOWNLOAD_VERSION}" \ + ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} +CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.alpine.3.18.linux-arm64-v8 b/xtask/docker/Dockerfile.alpine.3.18.linux-arm64-v8 new file mode 100644 index 00000000..8f85a823 --- /dev/null +++ b/xtask/docker/Dockerfile.alpine.3.18.linux-arm64-v8 @@ -0,0 +1,12 @@ +FROM --platform=linux/arm64/v8 alpine:3.18 +ARG DOWNLOAD_AUTH_TOKEN="" +ARG DOWNLOAD_RELEASE_ID="" +ARG DOWNLOAD_VERSION="" +ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} +ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} +ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} +COPY ./install.sh /tmp/ctinstall.sh +RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ + --version "${CT_DOWNLOAD_VERSION}" \ + ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} +CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.centos-7 b/xtask/docker/Dockerfile.centos.7 similarity index 100% rename from xtask/docker/Dockerfile.centos-7 rename to xtask/docker/Dockerfile.centos.7 diff --git a/xtask/docker/Dockerfile.debian-oldstable-slim b/xtask/docker/Dockerfile.debian.oldstable-slim similarity index 100% rename from xtask/docker/Dockerfile.debian-oldstable-slim rename to xtask/docker/Dockerfile.debian.oldstable-slim diff --git a/xtask/docker/Dockerfile.debian-stable-slim b/xtask/docker/Dockerfile.debian.stable-slim similarity index 100% rename from xtask/docker/Dockerfile.debian-stable-slim rename to xtask/docker/Dockerfile.debian.stable-slim diff --git a/xtask/docker/Dockerfile.debian-testing-slim b/xtask/docker/Dockerfile.debian.testing-slim similarity index 100% rename from xtask/docker/Dockerfile.debian-testing-slim rename to xtask/docker/Dockerfile.debian.testing-slim diff --git a/xtask/docker/Dockerfile.rockylinux-8 b/xtask/docker/Dockerfile.rockylinux.8 similarity index 100% rename from xtask/docker/Dockerfile.rockylinux-8 rename to xtask/docker/Dockerfile.rockylinux.8 diff --git a/xtask/docker/Dockerfile.rockylinux-9 b/xtask/docker/Dockerfile.rockylinux.9 similarity index 100% rename from xtask/docker/Dockerfile.rockylinux-9 rename to xtask/docker/Dockerfile.rockylinux.9 diff --git a/xtask/docker/Dockerfile.ubuntu-bionic b/xtask/docker/Dockerfile.ubuntu-bionic deleted file mode 100644 index 6cd3c0ec..00000000 --- a/xtask/docker/Dockerfile.ubuntu-bionic +++ /dev/null @@ -1,14 +0,0 @@ -FROM ubuntu:bionic -ARG DOWNLOAD_AUTH_TOKEN="" -ARG DOWNLOAD_RELEASE_ID="" -ARG DOWNLOAD_VERSION="" -ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} -ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} -ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} -# fixes apt-get issue on Debian and Ubuntu images where packages were missing -RUN apt-get update -COPY ./install.sh /tmp/ctinstall.sh -RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ - --version "${CT_DOWNLOAD_VERSION}" \ - ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} -CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.ubuntu-focal b/xtask/docker/Dockerfile.ubuntu-focal deleted file mode 100644 index 35db905b..00000000 --- a/xtask/docker/Dockerfile.ubuntu-focal +++ /dev/null @@ -1,14 +0,0 @@ -FROM ubuntu:focal -ARG DOWNLOAD_AUTH_TOKEN="" -ARG DOWNLOAD_RELEASE_ID="" -ARG DOWNLOAD_VERSION="" -ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} -ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} -ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} -# fixes apt-get issue on Debian and Ubuntu images where packages were missing -RUN apt-get update -COPY ./install.sh /tmp/ctinstall.sh -RUN chmod 755 /tmp/ctinstall.sh && /tmp/ctinstall.sh \ - --version "${CT_DOWNLOAD_VERSION}" \ - ${CT_DOWNLOAD_RELEASE_ID:+ --auth-token "${CT_DOWNLOAD_AUTH_TOKEN}" --release-id "${CT_DOWNLOAD_RELEASE_ID}"} -CMD cloudtruth --version \ No newline at end of file diff --git a/xtask/docker/Dockerfile.ubuntu-jammy b/xtask/docker/Dockerfile.ubuntu.jammy similarity index 100% rename from xtask/docker/Dockerfile.ubuntu-jammy rename to xtask/docker/Dockerfile.ubuntu.jammy diff --git a/xtask/docker/Dockerfile.ubuntu-kinetic b/xtask/docker/Dockerfile.ubuntu.kinetic similarity index 100% rename from xtask/docker/Dockerfile.ubuntu-kinetic rename to xtask/docker/Dockerfile.ubuntu.kinetic diff --git a/xtask/docker/Dockerfile.ubuntu-lunar b/xtask/docker/Dockerfile.ubuntu.lunar similarity index 100% rename from xtask/docker/Dockerfile.ubuntu-lunar rename to xtask/docker/Dockerfile.ubuntu.lunar diff --git a/xtask/gha-matrices/release-builds.json b/xtask/gha-matrices/release-builds.json index f61e32c6..ed7505e5 100644 --- a/xtask/gha-matrices/release-builds.json +++ b/xtask/gha-matrices/release-builds.json @@ -1 +1 @@ -{"include":[{"target":"x86_64-unknown-linux-musl","runner":"ubuntu-latest"},{"target":"arm-unknown-linux-gnueabihf","runner":"ubuntu-latest"},{"target":"aarch64-unknown-linux-gnu","runner":"ubuntu-latest"},{"target":"x86_64-apple-darwin","runner":"macos-latest"},{"target":"aarch64-apple-darwin","runner":"macos-latest"},{"target":"x86_64-pc-windows-msvc","runner":"windows-latest"}]} \ No newline at end of file +{"include":[{"target":"x86_64-unknown-linux-musl","runner":"ubuntu-latest"},{"target":"arm-unknown-linux-musleabihf","runner":"ubuntu-latest"},{"target":"armv7-unknown-linux-musleabihf","runner":"ubuntu-latest"},{"target":"aarch64-unknown-linux-musl","runner":"ubuntu-latest"},{"target":"x86_64-unknown-linux-gnu","runner":"ubuntu-latest"},{"target":"x86_64-apple-darwin","runner":"macos-latest"},{"target":"aarch64-apple-darwin","runner":"macos-latest"},{"target":"x86_64-pc-windows-msvc","runner":"windows-latest"}]} \ No newline at end of file diff --git a/xtask/gha-matrices/release-tests.json b/xtask/gha-matrices/release-tests.json index 27bb710c..e70c3238 100644 --- a/xtask/gha-matrices/release-tests.json +++ b/xtask/gha-matrices/release-tests.json @@ -1 +1 @@ -{"include":[{"os":"alpine","runner":"ubuntu-latest","version":"3.17","install_type":"docker"},{"os":"alpine","runner":"ubuntu-latest","version":"3.16","install_type":"docker"},{"os":"alpine","runner":"ubuntu-latest","version":"3.15","install_type":"docker"},{"os":"alpine","runner":"ubuntu-latest","version":"3.14","install_type":"docker"},{"os":"rockylinux","runner":"ubuntu-latest","version":"9","install_type":"docker"},{"os":"rockylinux","runner":"ubuntu-latest","version":"8","install_type":"docker"},{"os":"centos","runner":"ubuntu-latest","version":"7","install_type":"docker"},{"os":"debian","runner":"ubuntu-latest","version":"testing-slim","install_type":"docker"},{"os":"debian","runner":"ubuntu-latest","version":"stable-slim","install_type":"docker"},{"os":"debian","runner":"ubuntu-latest","version":"oldstable-slim","install_type":"docker"},{"os":"ubuntu","runner":"ubuntu-latest","version":"lunar","install_type":"docker"},{"os":"ubuntu","runner":"ubuntu-latest","version":"kinetic","install_type":"docker"},{"os":"ubuntu","runner":"ubuntu-latest","version":"jammy","install_type":"docker"},{"os":"ubuntu","runner":"ubuntu-latest","version":"focal","install_type":"docker"},{"os":"ubuntu","runner":"ubuntu-latest","version":"bionic","install_type":"docker"},{"os":"macos","runner":"macos-latest","version":"latest","install_type":"shell"},{"os":"windows","runner":"windows-latest","version":"latest","install_type":"powershell"}]} \ No newline at end of file +{"include":[{"display_name":"alpine-3.18 (linux/amd64)","os":"alpine","runner":"ubuntu-latest","version":"3.18","platform":"linux/amd64","install_type":"docker","dockerfile":"Dockerfile.alpine.3.18.linux-amd64"},{"display_name":"alpine-3.17 (linux/amd64)","os":"alpine","runner":"ubuntu-latest","version":"3.17","platform":"linux/amd64","install_type":"docker","dockerfile":"Dockerfile.alpine.3.17.linux-amd64"},{"display_name":"alpine-3.16 (linux/amd64)","os":"alpine","runner":"ubuntu-latest","version":"3.16","platform":"linux/amd64","install_type":"docker","dockerfile":"Dockerfile.alpine.3.16.linux-amd64"},{"display_name":"alpine-3.18 (linux/arm64/v8)","os":"alpine","runner":"ubuntu-latest","version":"3.18","platform":"linux/arm64/v8","install_type":"docker","dockerfile":"Dockerfile.alpine.3.18.linux-arm64-v8"},{"display_name":"alpine-3.17 (linux/arm64/v8)","os":"alpine","runner":"ubuntu-latest","version":"3.17","platform":"linux/arm64/v8","install_type":"docker","dockerfile":"Dockerfile.alpine.3.17.linux-arm64-v8"},{"display_name":"alpine-3.16 (linux/arm64/v8)","os":"alpine","runner":"ubuntu-latest","version":"3.16","platform":"linux/arm64/v8","install_type":"docker","dockerfile":"Dockerfile.alpine.3.16.linux-arm64-v8"},{"display_name":"alpine-3.18 (linux/arm/v7)","os":"alpine","runner":"ubuntu-latest","version":"3.18","platform":"linux/arm/v7","install_type":"docker","dockerfile":"Dockerfile.alpine.3.18.linux-arm-v7"},{"display_name":"alpine-3.17 (linux/arm/v7)","os":"alpine","runner":"ubuntu-latest","version":"3.17","platform":"linux/arm/v7","install_type":"docker","dockerfile":"Dockerfile.alpine.3.17.linux-arm-v7"},{"display_name":"alpine-3.16 (linux/arm/v7)","os":"alpine","runner":"ubuntu-latest","version":"3.16","platform":"linux/arm/v7","install_type":"docker","dockerfile":"Dockerfile.alpine.3.16.linux-arm-v7"},{"display_name":"alpine-3.18 (linux/arm/v6)","os":"alpine","runner":"ubuntu-latest","version":"3.18","platform":"linux/arm/v6","install_type":"docker","dockerfile":"Dockerfile.alpine.3.18.linux-arm-v6"},{"display_name":"alpine-3.17 (linux/arm/v6)","os":"alpine","runner":"ubuntu-latest","version":"3.17","platform":"linux/arm/v6","install_type":"docker","dockerfile":"Dockerfile.alpine.3.17.linux-arm-v6"},{"display_name":"alpine-3.16 (linux/arm/v6)","os":"alpine","runner":"ubuntu-latest","version":"3.16","platform":"linux/arm/v6","install_type":"docker","dockerfile":"Dockerfile.alpine.3.16.linux-arm-v6"},{"display_name":"rockylinux-9","os":"rockylinux","runner":"ubuntu-latest","version":"9","platform":null,"install_type":"docker","dockerfile":"Dockerfile.rockylinux.9"},{"display_name":"rockylinux-8","os":"rockylinux","runner":"ubuntu-latest","version":"8","platform":null,"install_type":"docker","dockerfile":"Dockerfile.rockylinux.8"},{"display_name":"centos-7","os":"centos","runner":"ubuntu-latest","version":"7","platform":null,"install_type":"docker","dockerfile":"Dockerfile.centos.7"},{"display_name":"debian-testing-slim","os":"debian","runner":"ubuntu-latest","version":"testing-slim","platform":null,"install_type":"docker","dockerfile":"Dockerfile.debian.testing-slim"},{"display_name":"debian-stable-slim","os":"debian","runner":"ubuntu-latest","version":"stable-slim","platform":null,"install_type":"docker","dockerfile":"Dockerfile.debian.stable-slim"},{"display_name":"debian-oldstable-slim","os":"debian","runner":"ubuntu-latest","version":"oldstable-slim","platform":null,"install_type":"docker","dockerfile":"Dockerfile.debian.oldstable-slim"},{"display_name":"ubuntu-lunar","os":"ubuntu","runner":"ubuntu-latest","version":"lunar","platform":null,"install_type":"docker","dockerfile":"Dockerfile.ubuntu.lunar"},{"display_name":"ubuntu-kinetic","os":"ubuntu","runner":"ubuntu-latest","version":"kinetic","platform":null,"install_type":"docker","dockerfile":"Dockerfile.ubuntu.kinetic"},{"display_name":"ubuntu-jammy","os":"ubuntu","runner":"ubuntu-latest","version":"jammy","platform":null,"install_type":"docker","dockerfile":"Dockerfile.ubuntu.jammy"},{"display_name":"macos-latest","os":"macos","runner":"macos-latest","version":"latest","platform":null,"install_type":"shell","dockerfile":"Dockerfile.macos.latest"},{"display_name":"windows-latest","os":"windows","runner":"windows-latest","version":"latest","platform":null,"install_type":"powershell","dockerfile":"Dockerfile.windows.latest"}]} \ No newline at end of file diff --git a/xtask/scripts/install-build-packages-linux.sh b/xtask/scripts/install-build-packages-linux.sh deleted file mode 100755 index 6c758692..00000000 --- a/xtask/scripts/install-build-packages-linux.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env sh -set -e -case $TARGET in - arm-unknown-linux-gnueabihf) - sudo apt-get -y update - sudo apt-get -y install gcc-arm-linux-gnueabihf - ;; - aarch64-unknown-linux-gnu) - sudo apt-get -y update - sudo apt-get -y install gcc-aarch64-linux-gnu - ;; -esac diff --git a/xtask/scripts/strip.sh b/xtask/scripts/strip.sh deleted file mode 100755 index 7bf52cbb..00000000 --- a/xtask/scripts/strip.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env sh -# Define the executable for stripping binaries, if one exists. -set -e -echo 'Pre-stripped binary size' -ls -lh "target/$TARGET/release/" -# Find strip executable -STRIP="strip" -case $TARGET in - arm-unknown-linux-gnueabihf) - STRIP="arm-linux-gnueabihf-strip" - ;; - aarch64-unknown-linux-gnu) - STRIP="aarch64-linux-gnu-strip" - ;; -esac; -# Strip binaries -"$STRIP" "target/$TARGET/release/$PROJECT_NAME" -echo 'Post-stripped binary size' -ls -lh "target/$TARGET/release/" diff --git a/xtask/src/config.rs b/xtask/src/config.rs index d99972be..1e88df09 100644 --- a/xtask/src/config.rs +++ b/xtask/src/config.rs @@ -28,6 +28,7 @@ pub struct ReleaseTestConfig<'c> { pub install_type: InstallType, #[serde(borrow)] pub versions: Vec>, + pub platforms: Option>>, } /// GitHub Actions runners @@ -48,9 +49,9 @@ impl From for RunnerOs { use RunnerOs::*; use TestOs::*; match test_os { - Alpine | RockyLinux | Centos | Debian | Ubuntu => UbuntuLatest, Macos => MacosLatest, Windows => WindowsLatest, + _ => UbuntuLatest, } } } @@ -59,6 +60,12 @@ impl From for RunnerOs { #[serde(rename_all = "lowercase")] pub enum TestOs { Alpine, + #[serde(rename = "arm32v6/alpine")] + AlpineArm32v6, + #[serde(rename = "arm32v7/alpine")] + AlpineArm32v7, + #[serde(rename = "arm64v8/alpine")] + AlpineArm64v8, RockyLinux, Centos, Debian, diff --git a/xtask/src/json/gh_matrix.rs b/xtask/src/json/gh_matrix.rs index 8013381c..ee532f1c 100644 --- a/xtask/src/json/gh_matrix.rs +++ b/xtask/src/json/gh_matrix.rs @@ -1,5 +1,10 @@ -use crate::config::{InstallType, ReleaseBuildConfig, ReleaseTestConfig, RunnerOs, TestOs}; -use itertools::Itertools; +use std::{borrow::Cow, iter}; + +use crate::{ + config::{InstallType, ReleaseBuildConfig, ReleaseTestConfig, RunnerOs, TestOs}, + templates::DockerTemplate, +}; +use itertools::{Either, Itertools}; use serde::Serialize; #[derive(Serialize)] @@ -9,7 +14,7 @@ pub struct ReleaseBuildMatrix<'c> { #[derive(Serialize)] pub struct ReleaseBuildIncludes<'c> { - pub target: &'c str, + pub target: Cow<'c, str>, pub runner: RunnerOs, } @@ -19,7 +24,7 @@ impl<'c> FromIterator<&'c ReleaseBuildConfig<'c>> for ReleaseBuildMatrix<'c> { .into_iter() .map( |&ReleaseBuildConfig { ref target, runner }| ReleaseBuildIncludes { - target: target.as_ref(), + target: Cow::from(target.as_ref()), runner, }, ) @@ -46,10 +51,13 @@ pub struct ReleaseTestMatrix<'c> { } #[derive(Serialize)] pub struct ReleaseTestIncludes<'c> { + pub display_name: Cow<'c, str>, pub os: TestOs, pub runner: RunnerOs, - pub version: &'c str, + pub version: Cow<'c, str>, + pub platform: Option>, pub install_type: InstallType, + pub dockerfile: Cow<'c, str>, } impl<'c> FromIterator<&'c ReleaseTestConfig<'c>> for ReleaseTestMatrix<'c> { @@ -61,12 +69,39 @@ impl<'c> FromIterator<&'c ReleaseTestConfig<'c>> for ReleaseTestMatrix<'c> { os, ref versions, install_type, + ref platforms, }| { - versions.iter().map(move |version| ReleaseTestIncludes { - os, - runner: RunnerOs::from(os), - version, - install_type, + let platforms = match platforms { + None => Either::Left(iter::once(None)), + Some(platforms) => Either::Right(platforms.iter().map(Option::Some)), + }; + platforms.flat_map(move |platform| { + versions.iter().map(move |version| { + let platform = platform.map(|p| Cow::from(p.as_ref())); + let version = Cow::from(version.as_ref()); + let dockerfile = Cow::Owned( + DockerTemplate { + image: os, + version: version.clone(), + platform: platform.clone(), + } + .file_name(), + ); + ReleaseTestIncludes { + display_name: release_test_display_name( + os, + version.as_ref(), + platform.as_ref().map(|p| p.as_ref()), + ) + .into(), + os, + runner: RunnerOs::from(os), + version, + platform, + install_type, + dockerfile, + } + }) }) }, ) @@ -86,3 +121,11 @@ impl std::fmt::Display for ReleaseTestIncludes<'_> { write!(f, "{}-{}", self.os, self.version) } } + +fn release_test_display_name(os: TestOs, version: &str, platform: Option<&str>) -> String { + let platform_suffix = platform + .as_ref() + .map(|p| format!(" ({p})")) + .unwrap_or_default(); + format!("{os}-{version}{platform_suffix}") +} diff --git a/xtask/src/templates/docker_template.rs b/xtask/src/templates/docker_template.rs index 22946a4f..62bc3217 100644 --- a/xtask/src/templates/docker_template.rs +++ b/xtask/src/templates/docker_template.rs @@ -1,22 +1,39 @@ -use std::io::Write; +use std::{borrow::Cow, io::Write, iter}; use crate::config::{InstallType, ReleaseTestConfig, TestOs}; use anyhow::*; use askama::Template; +use itertools::Either; use tokio::task::spawn_blocking; +// Matches path separator characters across platforms +fn path_separator(c: char) -> bool { + c == '/' || c == '\\' +} + /// Template for generating the installation test Dockerfiles #[derive(Debug, Template)] #[template(path = "Dockerfile", escape = "none")] //#[template(print = "code")] //uncomment for debugging generated code pub struct DockerTemplate<'c> { - pub os: TestOs, - pub version: &'c str, + pub image: TestOs, + pub version: Cow<'c, str>, + pub platform: Option>, } impl<'c> DockerTemplate<'c> { pub fn file_name(&self) -> String { - format!("Dockerfile.{}-{}", self.os, self.version) + let image = // sanitize slashes in image name + self.image + .to_string() + .replace(path_separator, "-"); + let version = self.version.as_ref().replace(path_separator, "-"); + let platform_suffix = self + .platform + .as_ref() + .map(|p| format!(".{p}").replace(path_separator, "-")) + .unwrap_or_default(); + format!("Dockerfile.{image}.{version}{platform_suffix}") } // Generate sequence of Dockerfiles from the release-tests config @@ -33,11 +50,22 @@ impl<'c> DockerTemplate<'c> { release_test: &'c ReleaseTestConfig<'c>, ) -> impl Iterator> { let &ReleaseTestConfig { - os, ref versions, .. + os, + ref versions, + ref platforms, + .. } = release_test; - versions - .iter() - .map(move |version| DockerTemplate { os, version }) + let platforms = match platforms { + None => Either::Left(iter::once(None)), + Some(platforms) => Either::Right(platforms.iter().map(Option::Some)), + }; + platforms.flat_map(move |platform| { + versions.iter().map(move |version| DockerTemplate { + image: os, + version: Cow::from(version.as_ref()), + platform: platform.map(|p| Cow::from(p.as_ref())), + }) + }) } pub fn write_dockerfile(&self, mut writer: W) -> Result<()> { diff --git a/xtask/templates/Dockerfile b/xtask/templates/Dockerfile index 744d28df..03f2d6f8 100644 --- a/xtask/templates/Dockerfile +++ b/xtask/templates/Dockerfile @@ -1,14 +1,14 @@ -FROM {{ os }}:{{ version }} +FROM {% if platform != None %}--platform={{platform.as_ref().unwrap()}} {% endif %}{{ image }}:{{ version }} ARG DOWNLOAD_AUTH_TOKEN="" ARG DOWNLOAD_RELEASE_ID="" ARG DOWNLOAD_VERSION="" ENV CT_DOWNLOAD_AUTH_TOKEN=${DOWNLOAD_AUTH_TOKEN} ENV CT_DOWNLOAD_RELEASE_ID=${DOWNLOAD_RELEASE_ID} ENV CT_DOWNLOAD_VERSION=${DOWNLOAD_VERSION} -{% if os == TestOs::Ubuntu || os == TestOs::Debian -%} +{% if image == TestOs::Ubuntu || image == TestOs::Debian -%} # fixes apt-get issue on Debian and Ubuntu images where packages were missing RUN apt-get update -{% else if os == TestOs::RockyLinux -%} +{% else if image == TestOs::RockyLinux -%} # fixes package conflict in rockylinux 9+ images # curl-minimal is already installed # but our install script tries to install curl