Skip to content

BirdNET-Go Nightly Build #83

BirdNET-Go Nightly Build

BirdNET-Go Nightly Build #83

Workflow file for this run

name: BirdNET-Go Nightly Build
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
env:
ACTIONS_RUNNER_DEBUG: true
ACTIONS_STEP_DEBUG: true
permissions:
contents: write
packages: write
jobs:
nightly:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- goos: linux
goarch: amd64
os: ubuntu-22.04
- goos: linux
goarch: arm64
os: ubuntu-22.04
- goos: windows
goarch: amd64
os: ubuntu-22.04
- goos: darwin
goarch: arm64
os: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
check-latest: true
- name: Install Linux system dependencies
if: matrix.os == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y build-essential pkg-config gcc-aarch64-linux-gnu gcc-mingw-w64-x86-64
- name: Build BirdNET-Go
run: |
# Build the application
make ${{ matrix.goos }}_${{ matrix.goarch }}
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: 1
- name: Create Release Artifacts
run: |
# Create artifacts directory
mkdir -p artifacts
# Set binary name based on OS
BINARY_NAME=birdnet-go
if [ "${{ matrix.goos }}" = "windows" ]; then
BINARY_NAME=birdnet-go.exe
fi
# Copy binary
cp bin/$BINARY_NAME artifacts/
# Copy required library files based on OS and architecture
if [ "${{ matrix.goos }}" = "linux" ]; then
if [ "${{ matrix.goarch }}" = "amd64" ]; then
cp /usr/lib/libtensorflowlite_c.so artifacts/
elif [ "${{ matrix.goarch }}" = "arm64" ]; then
cp /usr/aarch64-linux-gnu/lib/libtensorflowlite_c.so artifacts/
fi
elif [ "${{ matrix.goos }}" = "windows" ]; then
cp /usr/x86_64-w64-mingw32/lib/tensorflowlite_c.dll artifacts/
elif [ "${{ matrix.goos }}" = "darwin" ]; then
cp /opt/homebrew/lib/libtensorflowlite_c.dylib artifacts/
fi
# Create tarball
cd artifacts
tar czf ../birdnet-go-${{ matrix.goos }}-${{ matrix.goarch }}.tar.gz *
- name: Upload Build Artifacts
uses: actions/upload-artifact@v4
with:
name: birdnet-go-${{ matrix.goos }}-${{ matrix.goarch }}
path: birdnet-go-${{ matrix.goos }}-${{ matrix.goarch }}.tar.gz
# Optional: Create a GitHub release for tagged builds
- name: Create Release
if: github.event_name == 'workflow_dispatch'
run: |
DATE=$(date +'%Y%m%d')
echo "RELEASE_DATE=$DATE" >> $GITHUB_ENV
- name: Create GitHub Release
if: github.event_name == 'workflow_dispatch'
uses: softprops/action-gh-release@v1
with:
files: birdnet-go-${{ matrix.goos }}-${{ matrix.goarch }}.tar.gz
tag_name: nightly-${{ env.RELEASE_DATE }}
name: "Nightly Build ${{ env.RELEASE_DATE }}"
prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Delete old releases
uses: dev-drprasad/delete-older-releases@v0.3.2
with:
keep_latest: 14
delete_tags: true
delete_tag_pattern: ^nightly-
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
docker:
runs-on: ubuntu-24.04
strategy:
matrix:
include:
- platform: linux/amd64
runner: ubuntu-24.04
- platform: linux/arm64
runner: ubuntu-24.04-arm64
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate downcase repository name
run: |
echo "REPO=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ env.REPO }}
tags: |
type=raw,value=nightly
type=raw,value=nightly-{{date 'YYYYMMDD'}}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
push: true
platforms: ${{ matrix.platform }}
build-args: |
TARGETPLATFORM=${{ matrix.platform }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}