Skip to content

github/workflows: add job to validate cross-compilation and fix build on freebsd #3577

github/workflows: add job to validate cross-compilation and fix build on freebsd

github/workflows: add job to validate cross-compilation and fix build on freebsd #3577

Workflow file for this run

name: Build
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
# Validates that we can compile on the targets below
compile:
strategy:
matrix:
go_version:
- "1.22"
- "1.23"
goos:
- darwin
- freebsd
- linux
- windows
goarch:
- amd64
- arm64
name: cross-compilation (GOOS=${{ matrix.goos }}, GOARCH=${{ matrix.goarch }})
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/setup-go@v5.0.2
with:
go-version: "1.x"
- run: go build
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
test:
strategy:
matrix:
go_version:
- "1.22"
- "1.23"
os:
- macos
- ubuntu
- windows
name: tests (${{ matrix.os }}/go-${{ matrix.go_version }}
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/setup-go@v5.0.2
id: go
with:
go-version: ${{ matrix.go_version }}
- name: run-tests-race
run: go test -race -vet all -mod readonly ./...
lint:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: golangci/golangci-lint-action@v6.1.0
staticcheck:
name: staticcheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/setup-go@v5.0.2
id: go
with:
go-version: "1.23"
- run: |
go install honnef.co/go/tools/cmd/staticcheck@master
- name: get staticcheck version
id: get-staticcheck-version
run: |
echo "version=$(staticcheck --version | sed -e 's/,//g')" >>${GITHUB_OUTPUT}
- name: staticcheck cache
id: staticcheck-cache
uses: actions/cache@v4.0.2
with:
path: ~/.cache/staticcheck
key: "${{ steps.get-staticcheck-version.outputs.version }}"
- name: run staticcheck
run: |
staticcheck ./...
build-artifact:
name: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/setup-go@v5.0.2
id: go
with:
go-version: "1.23"
- name: go-build
run: go build -o fake-gcs-server
env:
CGO_ENABLED: 0
- name: sanity-check
uses: docker://alpine
with:
entrypoint: sh
args: -c "./fake-gcs-server -h"
- name: upload binary
uses: actions/upload-artifact@v4.4.0
with:
name: fake-gcs-server
path: ./fake-gcs-server
retention-days: 1
test-examples:
strategy:
matrix:
include:
- lang: python
docker-image: python:latest
entrypoint: /bin/bash
- lang: gsutil
docker-image: python:3.11
entrypoint: /bin/bash
- lang: node
docker-image: node:20-alpine
entrypoint: /bin/sh
- lang: go
docker-image: golang:1.23-alpine
entrypoint: /bin/sh
- lang: dotnet
docker-image: mcr.microsoft.com/dotnet/sdk:5.0-alpine
entrypoint: /bin/sh
- lang: scala
docker-image: mozilla/sbt:8u292_1.5.7
entrypoint: /bin/sh
- lang: java
docker-image: openjdk:17
entrypoint: /bin/sh
- lang: cpp
docker-image: alpine:3.15.4
entrypoint: /bin/sh
- lang: curl
docker-image: alpine
entrypoint: /bin/sh
- lang: curl-both-scheme-default-ports
docker-image: alpine
entrypoint: /bin/sh
- lang: curl-both-scheme-non-default-ports
docker-image: alpine
entrypoint: /bin/sh
name: test-${{ matrix.lang }}-example
runs-on: ubuntu-latest
needs:
- build-artifact
- lint
- staticcheck
steps:
- uses: actions/checkout@v4.1.7
- name: download binary
uses: actions/download-artifact@v4.1.8
with:
name: fake-gcs-server
- name: fix permissions
run: chmod +x fake-gcs-server
- name: docker pull ${{ matrix.docker-image }}
run: docker pull ${DOCKER_IMAGE}
env:
DOCKER_IMAGE: ${{ matrix.docker-image }}
- name: test-${{ matrix.lang }}-example
run: |
docker run --entrypoint ${ENTRYPOINT} -v ${PWD}:${PWD} -w ${PWD} ${DOCKER_IMAGE} ci/run-${LANG}-example.sh
env:
DOCKER_IMAGE: ${{ matrix.docker-image }}
ENTRYPOINT: ${{ matrix.entrypoint }}
LANG: ${{ matrix.lang }}
unblock-pr:
name: unblock-pr
runs-on: ubuntu-latest
needs:
- test-examples
- test
steps:
- run: "true"