diff --git a/.gitea/workflows/BuildTestPublish.yaml b/.gitea/workflows/BuildTestPublish.yaml new file mode 100644 index 0000000..72d8dfe --- /dev/null +++ b/.gitea/workflows/BuildTestPublish.yaml @@ -0,0 +1,35 @@ +name: Build-Test-Publish +run-name: Build test and publish all tools + +on: [push] + +defaults: + run: + shell: bash + +jobs: + build: + strategy: + matrix: + platform: + - linux/amd64 + - linux/arm64 + runs-on: ${{ matrix.platform }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Login to Gitea + uses: docker/login-action@v3 + with: + registry: gitea.jde.nz + username: DoesntMatter + password: ${{ secrets.DOCKER_PUSH_TOKEN }} + - name: Test + run: | + ./test.sh + - name: Publish + run: | + SOS_WRITE_TOKEN=${{ secrets.SOS_WRITE_TOKEN }} \ + RELEASE_WRITE_TOKEN=${{ secrets.RELEASE_WRITE_TOKEN }} \ + GITEA_CONTAINER_NAME=${{ env.JOB_CONTAINER_NAME }} \ + ./publish.sh \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25d53c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +output/ +*.swp +*.tmp +*~ +.DS_Store \ No newline at end of file diff --git a/publish.sh b/publish.sh new file mode 100755 index 0000000..b79e322 --- /dev/null +++ b/publish.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +set -euo pipefail + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +ARCH=$(uname -m) +PROJECT="$(basename "${SCRIPT_DIR}")" +OUTPUT="${SCRIPT_DIR}/output" + +function heading() { + # print a heading with a line of dashes + echo "--------------------------------" + echo "$1" + echo "--------------------------------" +} + +#-------------------------------------------------------------------------------- +heading "Publishing ${PROJECT}" + +function die() { + heading "error: $1" + exit 1 +} + +[[ -n ${SOS_WRITE_TOKEN:-} ]] || die "SOS_WRITE_TOKEN not specified" + +# clear output dir +rm -rf "${OUTPUT}" +mkdir -p "${OUTPUT}" + +#-------------------------------------------------------------------------------- + +# install getpkg +GETPKG_PATH="${HOME}/.local/bin/getpkg/getpkg" +if [ ! -f "${GETPKG_PATH}" ]; then + heading "Installing getpkg" + curl https://getbin.xyz/getpkg-install | bash + if [ ! -f "${GETPKG_PATH}" ]; then + die "getpkg failed to install to ${GETPKG_PATH}" + fi +fi + +#-------------------------------------------------------------------------------- +heading "Publishing ${PROJECT} as tool to ${PROJECT}:${ARCH} (on getpkg.xyz)" + +TOOLDIR="${OUTPUT}/tool" +mkdir "${TOOLDIR}" +cp "${PROJECT}" "${TOOLDIR}/${PROJECT}" +"${GETPKG_PATH}" server set-token getpkg.xyz "${SOS_WRITE_TOKEN}" +"${GETPKG_PATH}" publish "${PROJECT}:${ARCH}" "${TOOLDIR}" + +#-------------------------------------------------------------------------------- +heading "Publishing ${PROJECT} to getbin.xyz" + +# Download sos if not already present +SOS="${OUTPUT}/sos" +if [ ! -f "${SOS}" ]; then + heading "Downloading sos tool" + curl -L -s -o "${SOS}" "https://getbin.xyz/sos:latest" || die "Failed to download sos" + chmod +x "${SOS}" +fi + +# Upload architecture-specific binary to getbin.xyz +heading "Uploading ${PROJECT} binary to getbin.xyz as ${PROJECT}:latest-${ARCH}" +"${SOS}" upload "getbin.xyz" "${PROJECT}" "${PROJECT}:latest-${ARCH}" || die "Failed to upload ${PROJECT} binary to getbin.xyz" + +# Check if there's an install script to upload +if [ -f "${SCRIPT_DIR}/install.sh" ]; then + heading "Uploading install.sh to getbin.xyz as ${PROJECT}-install:latest" + "${SOS}" upload "getbin.xyz" "${SCRIPT_DIR}/install.sh" "${PROJECT}-install:latest" || die "Failed to upload install script to getbin.xyz" +fi + +heading "Successfully published ${PROJECT} to both getpkg.xyz and getbin.xyz" \ No newline at end of file