optimized docker builds (re-use containers)

This commit is contained in:
veeso
2023-03-08 11:49:09 +01:00
parent 279df59b5d
commit 51c2618b5a
9 changed files with 63 additions and 103 deletions

View File

@@ -1,7 +1,5 @@
FROM centos:centos7 as builder FROM centos:centos7 as builder
ARG branch
ENV branch=$branch
WORKDIR /usr/src/ WORKDIR /usr/src/
# Install dependencies # Install dependencies
RUN yum -y install \ RUN yum -y install \
@@ -18,13 +16,10 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh &&
chmod +x /tmp/rust.sh && \ chmod +x /tmp/rust.sh && \
/tmp/rust.sh -y /tmp/rust.sh -y
# Clone repository # Clone repository
RUN git clone --branch $branch https://github.com/veeso/termscp.git RUN git clone https://github.com/veeso/termscp.git
# Set workdir to termscp # Set workdir to termscp
WORKDIR /usr/src/termscp/ WORKDIR /usr/src/termscp/
# Build for x86_64
RUN source $HOME/.cargo/env && cargo build --release
# Install cargo rpm # Install cargo rpm
RUN source $HOME/.cargo/env && cargo install cargo-rpm RUN source $HOME/.cargo/env && cargo install cargo-rpm
# Build pkgs
RUN source $HOME/.cargo/env && cargo rpm init && cargo rpm build ENTRYPOINT ["tail", "-f", "/dev/null"]
CMD ["sh"]

View File

@@ -1,7 +1,5 @@
FROM debian:stretch FROM debian:stretch
ARG branch
ENV branch=$branch
WORKDIR /usr/src/ WORKDIR /usr/src/
# Install dependencies # Install dependencies
RUN apt update && apt install -y \ RUN apt update && apt install -y \
@@ -18,14 +16,10 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh &&
chmod +x /tmp/rust.sh && \ chmod +x /tmp/rust.sh && \
/tmp/rust.sh -y /tmp/rust.sh -y
# Clone repository # Clone repository
RUN git clone --branch $branch https://github.com/veeso/termscp.git RUN git clone https://github.com/veeso/termscp.git
# Set workdir to termscp # Set workdir to termscp
WORKDIR /usr/src/termscp/ WORKDIR /usr/src/termscp/
# Install cargo deb # Install cargo deb
RUN . $HOME/.cargo/env && cargo install cargo-deb RUN . $HOME/.cargo/env && cargo install cargo-deb
# Build for x86_64
RUN . $HOME/.cargo/env && cargo build --release
# Build pkgs
RUN . $HOME/.cargo/env && cargo deb
CMD ["bash"] ENTRYPOINT ["tail", "-f", "/dev/null"]

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "Usage: $0 <version> [branch]" echo "Usage: $0 <version> [branch] [--no-cache]"
exit 1 exit 1
fi fi
@@ -13,6 +13,16 @@ else
BRANCH=$2 BRANCH=$2
fi fi
CACHE=""
if [ "$3" == "--no-cache" ]; then
CACHE="--no-cache"
fi
# names
ARM64_DEB_NAME="termscp-arm64_deb"
ARM64_RPM_NAME="termscp-arm64_rpm"
set -e # Don't fail set -e # Don't fail
# Create pkgs directory # Create pkgs directory
@@ -22,13 +32,15 @@ cd -
mkdir -p ${PKGS_DIR}/ mkdir -p ${PKGS_DIR}/
# Build aarch64_deb # Build aarch64_deb
cd aarch64_debian9/ cd aarch64_debian9/
docker buildx build --platform linux/arm64 --no-cache --build-arg branch=${BRANCH} --tag termscp-${VERSION}-aarch64_debian9 . docker buildx build --platform linux/arm64 $CACHE --build-arg branch=${BRANCH} --tag $ARM64_DEB_NAME .
cd - cd -
mkdir -p ${PKGS_DIR}/deb/ mkdir -p ${PKGS_DIR}/deb/
mkdir -p ${PKGS_DIR}/aarch64-unknown-linux-gnu/ mkdir -p ${PKGS_DIR}/aarch64-unknown-linux-gnu/
CONTAINER_NAME=$(docker create termscp-${VERSION}-aarch64_debian9 /bin/bash) docker run --name "$ARM64_DEB_NAME" -d "$ARM64_DEB_NAME" || docker start "$ARM64_DEB_NAME"
docker exec -it "$ARM64_DEB_NAME" bash -c ". \$HOME/.cargo/env && git fetch origin && git checkout origin/$BRANCH && cargo build --release && cargo deb"
docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/debian/termscp_${VERSION}_arm64.deb ${PKGS_DIR}/deb/ docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/debian/termscp_${VERSION}_arm64.deb ${PKGS_DIR}/deb/
docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/release/termscp ${PKGS_DIR}/aarch64-unknown-linux-gnu/ docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/release/termscp ${PKGS_DIR}/aarch64-unknown-linux-gnu/
docker stop "$ARM64_DEB_NAME"
# Make tar.gz # Make tar.gz
cd ${PKGS_DIR}/aarch64-unknown-linux-gnu/ cd ${PKGS_DIR}/aarch64-unknown-linux-gnu/
tar cvzf termscp-v${VERSION}-aarch64-unknown-linux-gnu.tar.gz termscp tar cvzf termscp-v${VERSION}-aarch64-unknown-linux-gnu.tar.gz termscp
@@ -36,10 +48,11 @@ rm termscp
cd - cd -
# Build aarch64_centos7 # Build aarch64_centos7
cd aarch64_centos7/ cd aarch64_centos7/
docker buildx build --platform linux/arm64 --no-cache --build-arg branch=${BRANCH} --tag termscp-${VERSION}-aarch64_centos7 . docker buildx build --platform linux/arm64 $CACHE --build-arg branch=${BRANCH} --tag $ARM64_RPM_NAME .
cd - cd -
mkdir -p ${PKGS_DIR}/rpm/ mkdir -p ${PKGS_DIR}/rpm/
CONTAINER_NAME=$(docker create termscp-${VERSION}-aarch64_centos7 /bin/bash) docker run --name "$ARM64_RPM_NAME" -d "$ARM64_RPM_NAME" || docker start "$ARM64_RPM_NAME"
docker exec -it "$ARM64_RPM_NAME" bash -c ". \$HOME/.cargo/env && git fetch origin && git checkout origin/$BRANCH && cargo rpm init && cargo rpm build"
docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/release/rpmbuild/RPMS/aarch64/termscp-${VERSION}-1.el7.aarch64.rpm ${PKGS_DIR}/rpm/termscp-${VERSION}-1.aarch64.rpm docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/release/rpmbuild/RPMS/aarch64/termscp-${VERSION}-1.el7.aarch64.rpm ${PKGS_DIR}/rpm/termscp-${VERSION}-1.aarch64.rpm
exit $? exit $?

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "Usage: $0 <version> [branch]" echo "Usage: $0 <version> [branch] [--no-cache]"
exit 1 exit 1
fi fi
@@ -13,6 +13,16 @@ else
BRANCH=$2 BRANCH=$2
fi fi
CACHE=""
if [ "$3" == "--no-cache" ]; then
CACHE="--no-cache"
fi
# names
X86_64_DEB_NAME="termscp-x86_64_deb"
X86_64_RPM_NAME="termscp-x86_64_rpm"
set -e # Don't fail set -e # Don't fail
# Create pkgs directory # Create pkgs directory
@@ -22,13 +32,15 @@ cd -
mkdir -p ${PKGS_DIR}/ mkdir -p ${PKGS_DIR}/
# Build x86_64_deb # Build x86_64_deb
cd x86_64_debian9/ cd x86_64_debian9/
docker build --no-cache --build-arg branch=${BRANCH} --tag termscp-${VERSION}-x86_64_debian9 . docker build $CACHE --build-arg branch=${BRANCH} --tag "$X86_64_DEB_NAME" .
cd - cd -
mkdir -p ${PKGS_DIR}/deb/ mkdir -p ${PKGS_DIR}/deb/
mkdir -p ${PKGS_DIR}/x86_64-unknown-linux-gnu/ mkdir -p ${PKGS_DIR}/x86_64-unknown-linux-gnu/
CONTAINER_NAME=$(docker create termscp-${VERSION}-x86_64_debian9 /bin/bash) docker run --name "$X86_64_DEB_NAME" -d "$X86_64_DEB_NAME" || docker start "$X86_64_DEB_NAME"
docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/debian/termscp_${VERSION}_amd64.deb ${PKGS_DIR}/deb/ docker exec -it "$X86_64_DEB_NAME" bash -c ". \$HOME/.cargo/env && git fetch origin && git checkout origin/$BRANCH && cargo build --release && cargo deb"
docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/release/termscp ${PKGS_DIR}/x86_64-unknown-linux-gnu/ docker cp ${X86_64_DEB_NAME}:/usr/src/termscp/target/debian/termscp_${VERSION}_amd64.deb ${PKGS_DIR}/deb/
docker cp ${X86_64_DEB_NAME}:/usr/src/termscp/target/release/termscp ${PKGS_DIR}/x86_64-unknown-linux-gnu/
docker stop "$X86_64_DEB_NAME"
# Make tar.gz # Make tar.gz
cd ${PKGS_DIR}/x86_64-unknown-linux-gnu/ cd ${PKGS_DIR}/x86_64-unknown-linux-gnu/
tar cvzf termscp-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz termscp tar cvzf termscp-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz termscp
@@ -36,10 +48,12 @@ rm termscp
cd - cd -
# Build x86_64_centos7 # Build x86_64_centos7
cd x86_64_centos7/ cd x86_64_centos7/
docker build --no-cache --build-arg branch=${BRANCH} --tag termscp-${VERSION}-x86_64_centos7 . docker build $CACHE --build-arg branch=${BRANCH} --tag "$X86_64_RPM_NAME" .
cd - cd -
mkdir -p ${PKGS_DIR}/rpm/ mkdir -p ${PKGS_DIR}/rpm/
CONTAINER_NAME=$(docker create termscp-${VERSION}-x86_64_centos7 /bin/bash) docker run --name "$X86_64_RPM_NAME" -d "$X86_64_RPM_NAME" || docker start "$X86_64_RPM_NAME"
docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/release/rpmbuild/RPMS/x86_64/termscp-${VERSION}-1.el7.x86_64.rpm ${PKGS_DIR}/rpm/termscp-${VERSION}-1.x86_64.rpm docker exec -it "$X86_64_RPM_NAME" bash -c ". \$HOME/.cargo/env && git fetch origin && git checkout origin/$BRANCH && cargo rpm init && cargo rpm build"
docker cp ${X86_64_RPM_NAME}:/usr/src/termscp/target/release/rpmbuild/RPMS/x86_64/termscp-${VERSION}-1.el7.x86_64.rpm ${PKGS_DIR}/rpm/termscp-${VERSION}-1.x86_64.rpm
docker stop "$X86_64_RPM_NAME"
exit $? exit $?

22
dist/build/macos.sh vendored
View File

@@ -8,12 +8,12 @@ make_pkg() {
TARGET_DIR=target/release/ TARGET_DIR=target/release/
fi fi
ROOT_DIR=$(pwd) ROOT_DIR=$(pwd)
cd $TARGET_DIR cd "$TARGET_DIR"
PKG="termscp-v${VERSION}-${ARCH}-apple-darwin.tar.gz" PKG="termscp-v${VERSION}-${ARCH}-apple-darwin.tar.gz"
tar czf $PKG termscp tar czf "$PKG" termscp
HASH=$(sha256sum $PKG) HASH=$(sha256sum "$PKG")
mkdir -p ${ROOT_DIR}/dist/pkgs/macos/ mkdir -p "${ROOT_DIR}/dist/pkgs/macos/"
mv $PKG ${ROOT_DIR}/dist/pkgs/macos/$PKG mv "$PKG" "${ROOT_DIR}/dist/pkgs/macos/$PKG"
cd - cd -
echo "$HASH" echo "$HASH"
} }
@@ -24,7 +24,8 @@ if [ -z "$1" ]; then
fi fi
VERSION=$1 VERSION=$1
export BUILD_ROOT=$(pwd)/../../ export BUILD_ROOT
BUILD_ROOT="$(pwd)/../../"
set -e # Don't fail set -e # Don't fail
@@ -39,15 +40,18 @@ fi
# Build release (x86_64) # Build release (x86_64)
cargo build --release cargo build --release
# Make pkg # Make pkg
X86_64_HASH=$(make_pkg "x86_64" $VERSION) X86_64_HASH=$(make_pkg "x86_64" "$VERSION")
RET_X86_64=$?
cd $BUILD_ROOT cd "$BUILD_ROOT"
# Build ARM64 pkg # Build ARM64 pkg
cargo build --release --target aarch64-apple-darwin cargo build --release --target aarch64-apple-darwin
# Make pkg # Make pkg
ARM64_HASH=$(make_pkg "arm64" $VERSION "target/aarch64-apple-darwin/release/") ARM64_HASH=$(make_pkg "arm64" "$VERSION" "target/aarch64-apple-darwin/release/")
RET_ARM64=$?
echo "x86_64 hash: $X86_64_HASH" echo "x86_64 hash: $X86_64_HASH"
echo "arm64 hash: $ARM64_HASH" echo "arm64 hash: $ARM64_HASH"
[ "$RET_ARM64" -eq 0 ] && [ "$RET_X86_64" -eq 0 ]
exit $? exit $?

View File

@@ -1,22 +0,0 @@
FROM rust:1.55.0 AS builder
WORKDIR /usr/src/
# Add toolchains
RUN rustup target add x86_64-unknown-linux-gnu
# Install dependencies
RUN apt update && apt install -y \
git \
gcc \
pkg-config \
libdbus-1-dev \
curl
# Clone repository
RUN git clone https://github.com/veeso/termscp.git
# Set workdir to termscp
WORKDIR /usr/src/termscp/
# Install cargo RPM/Deb
RUN cargo install cargo-strip
# Build for x86_64
RUN cargo build --release --target x86_64-unknown-linux-gnu && cargo strip
CMD ["sh"]

View File

@@ -1,7 +1,5 @@
FROM centos:centos7 as builder FROM centos:centos7 as builder
ARG branch
ENV branch=$branch
WORKDIR /usr/src/ WORKDIR /usr/src/
# Install dependencies # Install dependencies
RUN yum -y install \ RUN yum -y install \
@@ -18,13 +16,10 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh &&
chmod +x /tmp/rust.sh && \ chmod +x /tmp/rust.sh && \
/tmp/rust.sh -y /tmp/rust.sh -y
# Clone repository # Clone repository
RUN git clone --branch $branch https://github.com/veeso/termscp.git RUN git clone https://github.com/veeso/termscp.git
# Set workdir to termscp # Set workdir to termscp
WORKDIR /usr/src/termscp/ WORKDIR /usr/src/termscp/
# Build for x86_64
RUN source $HOME/.cargo/env && cargo build --release
# Install cargo rpm # Install cargo rpm
RUN source $HOME/.cargo/env && cargo install cargo-rpm RUN source $HOME/.cargo/env && cargo install cargo-rpm
# Build pkgs
RUN source $HOME/.cargo/env && cargo rpm init && cargo rpm build ENTRYPOINT ["tail", "-f", "/dev/null"]
CMD ["sh"]

View File

@@ -1,27 +0,0 @@
FROM debian:jessie
WORKDIR /usr/src/
# Install dependencies
RUN apt update && apt install -y \
git \
gcc \
pkg-config \
libdbus-1-dev \
curl
# Install rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && \
chmod +x /tmp/rust.sh && \
/tmp/rust.sh -y
# Clone repository
RUN git clone https://github.com/veeso/termscp.git
# Set workdir to termscp
WORKDIR /usr/src/termscp/
# Install cargo deb
RUN . $HOME/.cargo/env && cargo install cargo-deb
# Build for x86_64
RUN . $HOME/.cargo/env && cargo build --release
# Build pkgs
RUN . $HOME/.cargo/env && cargo deb
CMD ["sh"]

View File

@@ -1,7 +1,5 @@
FROM debian:stretch FROM debian:stretch
ARG branch
ENV branch=$branch
WORKDIR /usr/src/ WORKDIR /usr/src/
# Install dependencies # Install dependencies
RUN apt update && apt install -y \ RUN apt update && apt install -y \
@@ -18,14 +16,10 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh &&
chmod +x /tmp/rust.sh && \ chmod +x /tmp/rust.sh && \
/tmp/rust.sh -y /tmp/rust.sh -y
# Clone repository # Clone repository
RUN git clone --branch $branch https://github.com/veeso/termscp.git RUN git clone https://github.com/veeso/termscp.git
# Set workdir to termscp # Set workdir to termscp
WORKDIR /usr/src/termscp/ WORKDIR /usr/src/termscp/
# Install cargo deb # Install cargo deb
RUN . $HOME/.cargo/env && cargo install cargo-deb RUN . $HOME/.cargo/env && cargo install cargo-deb
# Build for x86_64
RUN . $HOME/.cargo/env && cargo build --release
# Build pkgs
RUN . $HOME/.cargo/env && cargo deb
CMD ["bash"] ENTRYPOINT ["tail", "-f", "/dev/null"]