diff --git a/.drone.jsonnet b/.drone.jsonnet index 120bb2f..8d1ee63 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -1,5 +1,5 @@ local executableName = 'newsletter-to-web'; -local cross_image = 'img.kie.rs/jjkiers/rust-dind-cross:1.66-full'; +local build_image = 'rust:1.70'; local archs = [ { target: 'aarch64-unknown-linux-musl', short: 'arm64-musl' }, @@ -12,26 +12,32 @@ local getStepName(arch) = 'Build for ' + arch.short; local builtExecutableName(arch) = executableName + if std.length(std.findSubstr(arch.short, 'windows')) > 0 then '.exe' else ''; local targetExecutableName(arch) = executableName + '-' + arch.target + if std.length(std.findSubstr(arch.short, 'windows')) > 0 then '.exe' else ''; +local getVolumeName(arch) = 'target-' + arch.target; +local getLocalVolumes(arch) = [ + { + name: getVolumeName(arch), + temp: {}, + } + for arch in archs +]; + local add_build_steps() = [ { name: getStepName(arch), - image: cross_image, - volumes: [ - { - name: 'dockersock', - path: '/var/run', - }, - ], + image: build_image, commands: [ 'echo Hello World from Jsonnet on ' + arch.target + '!', - 'cross build --release --target ' + arch.target, + 'rustup target add ' + arch.target, + 'scripts/prepare-build.sh', + 'cargo zigbuild --release --target ' + arch.target, 'cp target/' + arch.target + '/release/' + builtExecutableName(arch) + ' artifacts/' + targetExecutableName(arch), 'rm -rf target/' + arch.target + '/release/*', ], - environment: { - CROSS_REMOTE: true, - }, depends_on: ['Wait for Docker'], + volumes: [{ + name: getVolumeName(arch), + path: '/drone/src/target', + }], } for arch in archs ]; @@ -46,10 +52,11 @@ local add_build_steps() = [ steps: [{ name: 'Wait for Docker', - image: cross_image, + image: build_image, commands: [ 'mkdir artifacts', - 'echo Using image: ' + cross_image, + '/usr/bin/env bash -c "pushd $(mktemp -d) && wget -nv https://download.docker.com/linux/debian/dists/bullseye/pool/stable/amd64/docker-ce-cli_24.0.2-1~debian.11~bullseye_amd64.deb -O docker-ce.dpkg && dpkg -i docker-ce.dpkg && popd"', + 'echo Using image: ' + build_image, 'while ! docker image ls; do sleep 1; done', 'cargo --version', 'rustc --version', @@ -68,7 +75,7 @@ local add_build_steps() = [ [ { name: 'Show built artifacts', - image: cross_image, + image: build_image, commands: [ 'ls -lah artifacts', ], @@ -109,11 +116,12 @@ local add_build_steps() = [ }], volumes: [ - { - name: 'dockersock', - temp: {}, - }, - ], + { + name: 'dockersock', + temp: {}, + }, + ] + + getLocalVolumes(archs), image_pull_secrets: ['docker_private_repo'], } diff --git a/scripts/prepare-build.sh b/scripts/prepare-build.sh new file mode 100755 index 0000000..3212d1c --- /dev/null +++ b/scripts/prepare-build.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +set -x +apt-get update && apt-get install -y jq curl + +pushd $(mktemp -d) + +# Install minisign +wget -nv https://github.com/jedisct1/minisign/releases/download/0.11/minisign-0.11-linux.tar.gz -O - | tar --strip-components 2 -C /usr/local/bin/ -vxzf - minisign-linux/x86_64/minisign + +# Installing zig, checking its validity +mkdir -p /usr/local/bin +wget -nv https://ziglang.org/download/index.json -O zig-versions.json + +echo "$(jq -r '.master."x86_64-linux".shasum' zig-versions.json) zig.tar.xz" > zig.tar.xz.shasum +wget -nv -c $(jq -r '.master."x86_64-linux".tarball' zig-versions.json) -O zig.tar.xz +wget -nv -c "$(jq -r '.master."x86_64-linux".tarball' zig-versions.json).minisig" -O zig.tar.xz.minisig +sha256sum -c zig.tar.xz.shasum + +if [ $? -ne 0 ]; then + echo "Error in SHA256 hash!" + exit 1 +else + echo "SHA256 hash OK" +fi + +minisign -P 'RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U' -Vm zig.tar.xz + +if [ $? -ne 0 ]; then + echo "Error in signature!" + exit 1 +else + echo "Signature OK" +fi + +tar -C /usr/local/bin --strip-components 1 -xf zig.tar.xz + +rm -rf zig* + +# Installing binstall and zigbuild +curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash +cargo binstall -y cargo-zigbuild + +popd \ No newline at end of file