name: Release on: push: branches: [main] jobs: build: runs-on: ubuntu-builder strategy: fail-fast: false matrix: target: - name: linux-amd64 toolchain: "" cmake_extra: "" - name: linux-arm64 toolchain: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-linux-arm64.cmake cmake_extra: "" - name: linux-armhf toolchain: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-linux-armhf.cmake cmake_extra: "" - name: windows-amd64 toolchain: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-windows-amd64.cmake cmake_extra: -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF - name: baremetal-arm32 toolchain: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-baremetal-arm32.cmake cmake_extra: -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED=OFF steps: - uses: actions/checkout@v4 - name: Install cross-compilers run: | sudo apt-get update sudo apt-get install -y \ gcc-arm-linux-gnueabihf \ gcc-aarch64-linux-gnu \ gcc-mingw-w64-x86-64 \ gcc-arm-none-eabi - name: Configure run: cmake -S . -B build -DBUILD_TESTING=OFF ${{ matrix.target.toolchain }} ${{ matrix.target.cmake_extra }} - name: Build run: cmake --build build - name: Run tests if: matrix.target.name == 'linux-amd64' run: ctest --test-dir build - name: Package run: | PKG="datarouter-${{ matrix.target.name }}" mkdir -p "dist/$PKG" cp datarouter.h datarouter_config_template.h LICENSE "dist/$PKG/" [ -f README.md ] && cp README.md "dist/$PKG/" for f in libDataRouter.a libDataRouter.so libDataRouter.dll libDataRouter.dll.a example example.exe; do [ -f "build/$f" ] && cp "build/$f" "dist/$PKG/" done - uses: actions/upload-artifact@v4 with: name: datarouter-${{ matrix.target.name }} path: dist/datarouter-${{ matrix.target.name }} release: needs: build runs-on: ubuntu-builder steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Verify merge commit run: | PARENTS=$(git log --format="%P" -1 | wc -w) [ "$PARENTS" -ge 2 ] || exit 78 - name: Read tag from HEAD id: tag run: | TAG=$(git tag --points-at HEAD | grep '^v' | head -n1) [ -n "$TAG" ] || exit 78 echo "tag=$TAG" >> "$GITHUB_OUTPUT" - uses: actions/download-artifact@v4 with: path: artifacts - name: Create release & upload assets run: | TAG="${{ steps.tag.outputs.tag }}" API="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases" echo "=== Creating release $TAG ===" RESP=$(curl -s -X POST \ -H "Authorization: token ${{ gitea.token }}" \ -H "Content-Type: application/json" \ -d "{\"tag_name\":\"${TAG}\",\"name\":\"DataRouter ${TAG}\"}" \ "$API") ID=$(echo "$RESP" | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])") for dir in artifacts/*/; do name="$(basename "$dir").tar.gz" tar czf "/tmp/$name" -C "$dir" . echo "Uploading $name" curl -s -X POST \ -H "Authorization: token ${{ gitea.token }}" \ -H "Content-Type: application/octet-stream" \ --data-binary @"/tmp/$name" \ "${API}/${ID}/assets?name=${name}" done