#!/bin/bash set -euo pipefail set +H ENTRYPOINT="$1" FLAGS_STRING="${2:-}" IFS=' ' read -r -a DENOCOMPILE_FLAGS <<< "$FLAGS_STRING" TAG_NAME=$(git describe --tags --abbrev=0) REPO_NAME=$(basename -s .git "$(git config --get remote.origin.url)") OWNER_NAME=$(basename "$(dirname "$(git config --get remote.origin.url)")") TMPDIR=$(mktemp -d) echo "Building for tag: $TAG_NAME" echo "Using entrypoint: $ENTRYPOINT" echo "With flags: ${DENOCOMPILE_FLAGS[*]}" platforms=( "x86_64-unknown-linux-gnu" "x86_64-pc-windows-msvc" "x86_64-apple-darwin" ) for target in "${platforms[@]}"; do echo "Compiling for $target" outfile="${TMPDIR}/${REPO_NAME}-${target}" [[ "$target" == *"windows"* ]] && outfile="${outfile}.exe" deno compile \ --target="$target" \ --output="$outfile" \ "${DENOCOMPILE_FLAGS[@]}" \ "$ENTRYPOINT" done # Generate changelog PREV_TAG=$(git describe --tags --abbrev=0 "$TAG_NAME"^ 2>/dev/null || echo "") if [[ -n "$PREV_TAG" ]]; then COMMITS=$(git log "$PREV_TAG..$TAG_NAME" --pretty=format:"%s (%an)" --no-merges) else COMMITS=$(git log --pretty=format:"%s (%an)" --no-merges) fi CHANGELOG="" append_section() { local TYPE="$1" local TITLE="$2" local EMOJI="$3" local MATCHED=$(echo "$COMMITS" | grep -E "^${TYPE}: " || true) if [[ -n "$MATCHED" ]]; then CHANGELOG+="## $EMOJI $TITLE\n" while IFS= read -r line; do local CLEANED=$(echo "$line" | sed -E "s/^${TYPE}: //") CHANGELOG+="- $CLEANED\n" done <<< "$MATCHED" CHANGELOG+="\n" fi } append_section "feat" "Features" "โœจ" append_section "fix" "Fixes" "๐Ÿ›" # append_section "chore" "Chores" "๐Ÿงน" # Fallback if no commits found [[ -z "$CHANGELOG" ]] && CHANGELOG="No commit history found." # Inject into manual changelog if available MANUAL_SECTION="" if [[ -f "CHANGELOG.md" ]]; then MANUAL_SECTION=$(awk "/^## \\[?$TAG_NAME\\]? /{flag=1; next} /^## /{flag=0} flag" CHANGELOG.md) if [[ "$MANUAL_SECTION" == *""* ]]; then MANUAL_SECTION=$(echo "$MANUAL_SECTION" | sed "s||$CHANGELOG|") fi fi RELEASE_BODY="${MANUAL_SECTION:-$CHANGELOG}" RELEASE_BODY_ESCAPED=$(printf "%s" "$RELEASE_BODY" | sed ':a;N;$!ba;s/\n/\\n/g; s/"/\\"/g') # Determine prerelease IS_PRERELEASE="false" [[ "$TAG_NAME" =~ -[0-9A-Za-z] ]] && IS_PRERELEASE="true" # Create release API_URL="${CI_SERVER_URL:-https://git.cyborggrizzly.com}/api/v1" RELEASE_ENDPOINT="$API_URL/repos/$OWNER_NAME/$REPO_NAME/releases" RELEASE_JSON=$(curl -sS -X POST "$RELEASE_ENDPOINT" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d @- <