name: CI on: push: branches: - '*' tags: - 'v*' pull_request: env: CARGO_INCREMENTAL: 0 jobs: tests: runs-on: ubuntu-latest strategy: matrix: database: - postgres - sqlite env: DATABASE: ${{ matrix.database }} steps: - name: Checkout uses: actions/checkout@v4 - name: Install Nix uses: cachix/install-nix-action@v27 with: nix_path: nixpkgs=channel:nixos-24.05 - name: Cargo cache uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-test-${{ matrix.database }}-${{ hashFiles('**/Cargo.lock') }} - name: Start dependency services run: docker compose up -d - name: Build UI run: nix-shell --command "make build-ui" - name: Run tests run: nix-shell --command "make test" dist: needs: tests runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/v') strategy: matrix: database: - postgres - sqlite env: DATABASE: ${{ matrix.database }} steps: - name: Checkout uses: actions/checkout@v4 - name: Install Nix uses: cachix/install-nix-action@v27 with: nix_path: nixpkgs=channel:nixos-24.05 - name: Cargo cache uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-dist-${{ hashFiles('**/Cargo.lock') }} - name: Build UI run: nix-shell --command "make build-ui" - name: Install dev dependencies run: nix-shell --command "make dev-dependencies" - name: Build distributables run: nix-shell --command "make dist" - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: eu-west-1 - name: Upload binaries to S3 run: | aws s3 sync dist s3://builds.loraserver.io/chirpstack if: startsWith(github.ref, 'refs/tags/v') - name: Docker meta id: meta uses: docker/metadata-action@v3 with: images: | chirpstack/${{ github.event.repository.name }}${{ matrix.database != 'postgres' && format('-{0}', matrix.database) || '' }} tags: | type=semver,pattern={{version}} type=semver,pattern={{major}} type=semver,pattern={{major}}.{{minor}} - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 with: config: .github/buildkitd.toml - name: Login to DockerHub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push id: docker_build uses: docker/build-push-action@v2 with: context: . push: ${{ startsWith(github.ref, 'refs/tags/v') }} platforms: linux/amd64,linux/arm/v7,linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }}