From a67489517337edecf4a90482612b7b8a10527a68 Mon Sep 17 00:00:00 2001 From: Jacob Kiers Date: Wed, 8 Apr 2026 23:04:58 +0200 Subject: [PATCH] Make the build work --- .woodpecker/build.yaml | 113 +++++++++++----------------- scripts/create_release_artifacts.sh | 50 ++++++++++++ scripts/install_tea.sh | 39 ++++++++++ 3 files changed, 134 insertions(+), 68 deletions(-) create mode 100755 scripts/create_release_artifacts.sh create mode 100755 scripts/install_tea.sh diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index b0bdce7..6c44c23 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -1,75 +1,52 @@ -# .woodpecker.yml +when: + - event: + - push + - tag + - manual + + matrix: include: - - TARGET: aarch64-unknown-linux-musl - SHORT: arm64-musl - - TARGET: x86_64-pc-windows-gnu - SHORT: windows - TARGET: x86_64-unknown-linux-musl SHORT: amd64-musl + BIN_SUFFIX: + - TARGET: aarch64-unknown-linux-musl + SHORT: arm64-musl + BIN_SUFFIX: + - TARGET: x86_64-pc-windows-gnu + SHORT: windows + BIN_SUFFIX: .exe -pipeline: - kind: pipeline - type: docker - name: default - platform: - arch: amd64 +steps: + - name: Prepare + image: img.kie.rs/jjkiers/rust-crossbuild:rust1.79.0-zig0.11.0-zig + commands: + - echo Using image img.kie.rs/jjkiers/rust-crossbuild:rust1.79.0-zig0.11.0-zig + - mkdir -p artifacts + - cargo --version + - rustc --version + - set - volumes: - - name: target-${TARGET} - temp: {} - - steps: - - name: Prepare - image: img.kie.rs/jjkiers/rust-crossbuild:rust1.79.0-zig0.11.0-zig - commands: - - mkdir -p artifacts - - echo "Using image: img.kie.rs/jjkiers/rust-crossbuild:rust1.79.0-zig0.11.0-zig" - - cargo --version - - rustc --version - - - name: Build for ${SHORT} - image: img.kie.rs/jjkiers/rust-crossbuild:rust1.79.0-zig0.11.0-zig - commands: - - | - if echo "${SHORT}" | grep -q windows; then - BIN_SUFFIX=.exe - else - BIN_SUFFIX= - fi - - echo "Building ${TARGET} (${SHORT})" - - cargo zigbuild --release --target ${TARGET} - - mkdir -p artifacts - - cp target/${TARGET}/release/l4p${BIN_SUFFIX} artifacts/l4p-${TARGET}${BIN_SUFFIX} - - rm -rf target/${TARGET}/release/* - depends_on: - - Prepare - volumes: - - name: target-${TARGET} - path: /drone/src/target - - - name: Show built artifacts - image: img.kie.rs/jjkiers/rust-crossbuild:rust1.79.0-zig0.11.0-zig - commands: - - ls -lah artifacts - depends_on: - - Build for ${SHORT} - - - name: Create release on gitea - image: plugins/gitea-release - settings: - api_key: - from_secret: gitea_token - base_url: https://code.kiers.eu - files: artifacts/* - checksum: sha256 - when: - event: - - tag - - promote - depends_on: - - Show built artifacts - -image_pull_secrets: - - docker_private_repo + - name: Build for ${SHORT} + image: img.kie.rs/jjkiers/rust-crossbuild:rust1.79.0-zig0.11.0-zig + commands: + - echo Building ${TARGET} \(${SHORT}\) + - cargo zigbuild --release --target ${TARGET} + - mkdir -p artifacts + - cp target/${TARGET}/release/l4p${BIN_SUFFIX} artifacts/l4p-${TARGET}${BIN_SUFFIX} + - rm -rf target/${TARGET}/release/* + depends_on: + - Prepare + - name: Release + image: img.kie.rs/jjkiers/rust-crossbuild:rust1.79.0-zig0.11.0-zig + when: + - event: tag + commands: + - ls -lah artifacts + - scripts/create_release_artifacts.sh + environment: + GITEA_SERVER_TOKEN: + from_secret: gitea_token + depends_on: + - Build for ${SHORT} diff --git a/scripts/create_release_artifacts.sh b/scripts/create_release_artifacts.sh new file mode 100755 index 0000000..fddf15c --- /dev/null +++ b/scripts/create_release_artifacts.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# vim: set expandtab shiftwidth=4 softtabstop=4 tabstop=4 : +set -euo pipefail + +if [ -z "${CI_COMMIT_TAG:-}" ]; then + echo "No commit tag set" + exit 1 +fi + +DIR=$(realpath $(dirname "${BASH_SOURCE[0]}") ) + +echo ${DIR} + +${DIR}/install_tea.sh linux-amd64 https://gitea.com/api/v1/repos/gitea/tea/releases/latest + +## Log in to Gitea + +TEA=$(pwd)/tea + +if [ -z "${GITEA_SERVER_URL:-}" ]; then + + if [ -z "${CI_FORGE_URL:-}" ]; then + echo "Cannot log in to gitea: GITEA_SERVER_URL or CI_FORGE_URL missing" + exit 1 + fi + + GITEA_SERVER_URL=${CI_FORGE_URL} +fi + +if [ -z "${GITEA_SERVER_TOKEN:-}" ]; then + echo "Cannot log in to gitea: GITEA_SERVER_TOKEN missing" + exit 1 +fi + +if ! ${TEA} login ls | grep ${GITEA_SERVER_URL} 2>&1 > /dev/null || false; then + ${TEA} login add +else + echo "Already logged in to ${GITEA_SERVER_URL}" +fi + +## Check and create tag + +if ${TEA} release ls -o json | jq -e --arg tag "${CI_COMMIT_TAG}" 'map(.["tag-_name"]) | index($tag) != null' >/dev/null; then + echo "Release ${CI_COMMIT_TAG} exists" +else + echo "Creating release ${CI_COMMIT_TAG}" + ${TEA} release create -o json --tag "${CI_COMMIT_TAG}" --title "${CI_COMMIT_TAG}" --draft +fi + +find $(dirname ${DIR})/artifacts -type f -exec ${TEA} releases assets create -o json ${CI_COMMIT_TAG} {} + diff --git a/scripts/install_tea.sh b/scripts/install_tea.sh new file mode 100755 index 0000000..adfe83d --- /dev/null +++ b/scripts/install_tea.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -eo pipefail + +if [ -x ./tea ]; then + echo "tea already installed in current directory"; exit 0 +fi + +platform="${1:-linux-amd64}" +src="${2:-release.json}" + +# obtain JSON: if src looks like a URL fetch it, otherwise treat as filename (or default file) +if [[ "$src" =~ ^https?:// ]]; then + curl -fsSL "$src" -o /tmp/release.json.$$ + json="/tmp/release.json.$$" + trap 'rm -f "$json"' EXIT +elif [ -f "$src" ]; then + json="$src" +else + echo "release JSON not found; provide a filename or URL as second arg" >&2 + exit 1 +fi + +# read tag and find binary URL (exclude archives/checksums/sigs) +tag=$(jq -r '.tag_name' "$json") +url=$(jq -r --arg p "$platform" '.assets[] + | select(.name | test($p)) + | select(.name | test("\\.(xz|zip|gz|tar|bz2|7z|sha256|sha256sum|sig|asc)$") | not) + | .browser_download_url' "$json" | head -n1) + +[ -n "$url" ] || { echo "binary not found for $platform" >&2; exit 1; } + +tmp="$(mktemp)" +trap 'rm -f "$tmp"' EXIT + +curl -fsSL "$url" -o "$tmp" +mv "$tmp" tea +chmod +x tea +echo "Downloaded tag ${tag}: $url -> ./tea" + -- 2.43.0