kind: pipeline type: kubernetes name: Build on Multiple Distributions steps: - name: clone repo image: alpine/git commands: - git clone https://gitea.akshun-lab.uk/akshun/rust-setup.git /artifacts volumes: - name: artifacts path: /artifacts - name: build on arch image: archlinux:latest commands: - pacman -Syu --noconfirm - pacman -S --noconfirm rustup gcc - rustup default stable - cd /artifacts - cargo build --release - cp /artifacts/target/release/setup /artifacts/ - mv /artifacts/setup /artifacts/arch-setup volumes: - name: artifacts path: /artifacts - name: build on debian image: debian:stable commands: - apt update && apt upgrade -y - apt install curl gcc - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - . $HOME/.cargo/env - cd /artifacts - cargo build --release - cp /artifacts/target/release/setup /artifacts/ - mv /artifacts/setup /artifacts/debian-setup volumes: - name: artifacts path: /artifacts - name: build on fedora image: fedora:latest commands: - dnf up -y - dnf install curl gcc -y - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - . $HOME/.cargo/env - cd /artifacts - cargo build --release - cp /artifacts/target/release/setup /arifacts/ - mv /arifacts/setup /artifacts/fedora-setup volumes: - name: artifacts path: /artifacts - name: upload-to-gitea image: alpine/curl commands: - apk add curl jq - | # Ensure required variables are set if [ -z "$GITEA_TOKEN" ] || [ -z "$GITEA_SERVER" ]; then echo "Error: GITEA_TOKEN or GITEA_SERVER not set" exit 1 fi # Set repo path (fallback if DRONE_REPO is not set) REPO_PATH="${DRONE_REPO:-akshun/setup-script}" # Create or get release if [ -n "${DRONE_TAG}" ]; then echo "Creating release for tag ${DRONE_TAG}" response=$(curl -s -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"tag_name": "'"${DRONE_TAG}"'", "name": "'"${DRONE_TAG}"'", "body": "Automated release"}' \ "$GITEA_SERVER/api/v1/repos/$REPO_PATH/releases") release_id=$(echo "$response" | jq -r '.id') else echo "Using latest release" # Try to get latest release response=$(curl -s -H "Authorization: token $GITEA_TOKEN" \ "$GITEA_SERVER/api/v1/repos/$REPO_PATH/releases/latest" || echo "") if [ -z "$response" ] || [ "$(echo "$response" | jq -r '.id')" = "null" ]; then # Create a new draft release if none exists echo "Creating new draft release" response=$(curl -s -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"tag_name": "continuous", "name": "Continuous Build", "draft": true, "body": "Automated continuous build"}' \ "$GITEA_SERVER/api/v1/repos/$REPO_PATH/releases") fi release_id=$(echo "$response" | jq -r '.id') fi # Upload artifacts for artifact in /artifacts/*-setup; do if [ -f "$artifact" ]; then filename=$(basename "$artifact") echo "Uploading $filename to Gitea release $release_id" curl -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: multipart/form-data" \ -F "attachment=@$artifact" \ "$GITEA_SERVER/api/v1/repos/$REPO_PATH/releases/$release_id/assets?name=$filename" else echo "No artifacts found matching /artifacts/*-setup" fi done environment: GITEA_TOKEN: from_secret: gitea-token GITEA_SERVER: from_secret: gitea-server volumes: - name: artifacts path: /artifacts volumes: - name: artifacts temp: {}