name: CI on: push: branches: [main] tags: ['v*'] pull_request: branches: [main] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install V run: | set -e mkdir -p $HOME/.local/bin echo "Trying to download V from GitHub..." mkdir -p /opt/v if curl -fsSL --connect-timeout 10 https://github.com/vlang/v/releases/latest/download/v_linux.zip -o /tmp/v.zip; then unzip -q /tmp/v.zip -d /opt/v # V binary may be at /opt/v/v or /opt/v/v/v depending on zip structure V_BIN=$(find /opt/v -name v -type f | head -1) if [ -n "$V_BIN" ]; then ln -sf "$V_BIN" /usr/local/bin/v 2>/dev/null || ln -sf "$V_BIN" $HOME/.local/bin/v fi else echo "GitHub unreachable — installing V from source (no submodules)..." git clone --depth 1 --single-branch --recurse-submodules=no https://github.com/vlang/v /opt/v 2>/dev/null || true if [ -f /opt/v/v ]; then ln -sf /opt/v/v $HOME/.local/bin/v else cd /opt/v && make without_tcc 2>/dev/null || make 2>/dev/null || true ln -sf /opt/v/v $HOME/.local/bin/v 2>/dev/null || true fi fi export PATH="$HOME/.local/bin:$PATH" echo "V version:" && v version - name: Install cross-compilers run: | sudo apt-get update -qq sudo apt-get install -y -qq gcc-mingw-w64-x86-64 gcc-aarch64-linux-gnu - name: Build Linux x86_64 run: | export PATH="$HOME/.local/bin:$PATH" mkdir -p build v -prod -os linux -arch amd64 -o build/ntfy-bridge-linux-x86_64 . - name: Build Linux arm64 (Raspberry Pi) run: | export PATH="$HOME/.local/bin:$PATH" v -prod -os linux -arch arm64 -o build/ntfy-bridge-linux-arm64 . - name: Build Windows x86_64 run: | export PATH="$HOME/.local/bin:$PATH" v -prod -os windows -arch amd64 -o build/ntfy-bridge-windows-x86_64.exe . - name: Test run: | export PATH="$HOME/.local/bin:$PATH" v test . - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: binaires path: build/* - name: Upload to Nexus raw repository (tags only) if: startsWith(github.ref, 'refs/tags/v') env: NEXUS_URL: ${{ secrets.NEXUS_URL }} NEXUS_USER: ${{ secrets.NEXUS_USER }} NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} run: | set -euo pipefail VERSION=${GITHUB_REF#refs/tags/} for FILE in build/ntfy-bridge-*; do [ -f "$FILE" ] || continue FNAME=$(basename "$FILE") echo "==> Uploading ${FNAME} to Nexus (${VERSION})..." curl -sf -u "${NEXUS_USER}:${NEXUS_PASSWORD}" \ -X PUT \ -H "Content-Type: application/octet-stream" \ --data-binary "@${FILE}" \ "${NEXUS_URL}/repository/raw-hosted/ntfy-bridge/${VERSION}/${FNAME}" echo " OK" done