diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 9774f4c..1367ed8 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -1,23 +1,93 @@ -name: Build packages +name: Build & Publish Packages on: - push: - branches: [main] + workflow_dispatch: + inputs: + packages: + description: 'Packages to build (comma-separated) or leave empty for all' + required: false + default: '' jobs: - build: + prepare: + name: Prepare matrix runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.matrix.outputs.matrix }} steps: - uses: actions/checkout@v4 - - name: Build each package + - name: Build package matrix + id: matrix + shell: bash run: | - for pkg in */; do - [ -f "${pkg}VERSION" ] || continue - echo "=== Processing $pkg ===" + INPUT="${{ github.event.inputs.packages }}" + + if [[ -n "$INPUT" ]]; then + PACKAGES=$(echo "$INPUT" | tr ',' '\n' | xargs | jq -Rrc '[splits(" ")]') + else + PACKAGES=$(find . -maxdepth 2 -name Makefile \ + | sed 's|^\./||;s|/Makefile||' \ + | grep -v '^_' \ + | sort \ + | jq -Rsc '[split("\n")[] | select(. != "")]') + fi + + echo "matrix={\"package\": $PACKAGES}" >> "$GITHUB_OUTPUT" + + build: + name: ${{ matrix.package }} + needs: prepare + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.prepare.outputs.matrix) }} + + steps: + - uses: actions/checkout@v4 + + - name: Read Makefile + id: cfg + shell: bash + run: | + MF="${{ matrix.package }}/Makefile" + get() { grep -E "^$1\s*[?:]?=" "$MF" 2>/dev/null | head -1 | sed 's/[^=]*=\s*//' | xargs; } + + echo "version=$(get VERSION)" >> "$GITHUB_OUTPUT" + echo "image=$(get IMAGE || echo 'debian:bookworm-slim')" >> "$GITHUB_OUTPUT" + echo "steps=$(get STEPS || echo 'env download build publish')" >> "$GITHUB_OUTPUT" + + - name: Run stages + shell: bash + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + PACKAGE: ${{ matrix.package }} + VERSION: ${{ steps.cfg.outputs.version }} + GITEA_URL: ${{ vars.GITEA_URL }} + GITEA_OWNER: ${{ vars.GITEA_OWNER }} + GITEA_REPO: ${{ vars.GITEA_REPO }} + run: | + SCRIPTS_DIR="$(pwd)/${{ matrix.package }}/scripts" + WORK_DIR="$(pwd)/${{ matrix.package }}" + IMAGE="${{ steps.cfg.outputs.image }}" + STEPS="${{ steps.cfg.outputs.steps }}" + + for STEP in $STEPS; do + SCRIPT="$SCRIPTS_DIR/${STEP}.sh" + if [[ ! -f "$SCRIPT" ]]; then + echo "⏭ skip: $STEP (no ${STEP}.sh)" + continue + fi + echo "▶ run: $STEP" docker run --rm \ - -v "$PWD/$pkg:/work" \ - -w /work \ - alpine \ - ls -la - done + -v "$WORK_DIR:/pkg" \ + -w /pkg \ + -e PACKAGE \ + -e VERSION \ + -e GITEA_URL \ + -e GITEA_OWNER \ + -e GITEA_REPO \ + -e GITEA_TOKEN \ + "$IMAGE" \ + bash /pkg/scripts/${STEP}.sh + done \ No newline at end of file diff --git a/v2ray/Makefile b/v2ray/Makefile index 341ff77..2bd678a 100644 --- a/v2ray/Makefile +++ b/v2ray/Makefile @@ -1,46 +1,3 @@ -PORTNAME=v2ray -VERSION=$(shell cat VERSION) -DISTFILE=v2ray-linux-64.zip -MASTER_SITE=https://github.com/v2fly/v2ray-core/releases/download/v$(VERSION) -DISTDIR=dist - -GITEA_USER?=andrew -GITEA_URL?=https://git.nakolenke.org -GITEA_ORG?=nakolenke-pub -SUITE?=trixie - -all: fetch build - -fetch: - @echo ">>> Fetching $(DISTFILE)" - @wget -q "$(MASTER_SITE)/$(DISTFILE)" -O /tmp/$(DISTFILE) - @mkdir -p $(DISTDIR) - @unzip -q /tmp/$(DISTFILE) -d $(DISTDIR)/ - @chmod +x $(DISTDIR)/$(PORTNAME) - @rm /tmp/$(DISTFILE) - -build: - @echo ">>> Building $(PORTNAME)-$(VERSION).deb" - @docker run --rm \ - -v $(CURDIR):/work \ - -w /work \ - -e VERSION=$(VERSION) \ - goreleaser/nfpm package \ - --config nfpm.yaml \ - --target /work \ - --packager deb - -publish: - @echo ">>> Publishing $(PORTNAME)-$(VERSION)" - @DEB=$$(ls *.deb | head -1) && \ - HTTP_CODE=$$(curl -s -o /tmp/resp.txt -w "%{http_code}" \ - --user "$(GITEA_USER):$(GITEA_TOKEN)" \ - --upload-file "$$DEB" \ - "$(GITEA_URL)/api/packages/$(GITEA_ORG)/debian/pool/$(SUITE)/main/upload") && \ - cat /tmp/resp.txt && \ - [ "$$HTTP_CODE" = "201" ] || exit 1 - -clean: - @rm -rf $(DISTDIR) *.deb - -.PHONY: all fetch build publish clean +VERSION = 5.16.1 +IMAGE = debian:bookworm-slim +STEPS = env download publish \ No newline at end of file diff --git a/v2ray/scripts/download.sh b/v2ray/scripts/download.sh index 2423abc..2e9398d 100755 --- a/v2ray/scripts/download.sh +++ b/v2ray/scripts/download.sh @@ -1,7 +1,12 @@ -# v2ray/scripts/download.sh -#!/bin/bash -VERSION=$1 -wget -q "https://github.com/v2fly/v2ray-core/releases/download/v${VERSION}/v2ray-linux-64.zip" -mkdir -p dist -unzip -q v2ray-linux-64.zip -d dist/ -chmod +x dist/v2ray +# # v2ray/scripts/download.sh +# #!/bin/bash +# VERSION=$1 +# wget -q "https://github.com/v2fly/v2ray-core/releases/download/v${VERSION}/v2ray-linux-64.zip" +# mkdir -p dist +# unzip -q v2ray-linux-64.zip -d dist/ +# chmod +x dist/v2ray + + +#!/usr/bin/env bash +set -euo pipefail +echo "download: $PACKAGE v$VERSION" \ No newline at end of file diff --git a/v2ray/scripts/env.sh b/v2ray/scripts/env.sh new file mode 100644 index 0000000..1a386ba --- /dev/null +++ b/v2ray/scripts/env.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +set -euo pipefail +echo "env: $PACKAGE v$VERSION" \ No newline at end of file diff --git a/v2ray/scripts/publish.sh b/v2ray/scripts/publish.sh new file mode 100644 index 0000000..715cd96 --- /dev/null +++ b/v2ray/scripts/publish.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +set -euo pipefail +echo "publish: $PACKAGE v$VERSION" \ No newline at end of file