Skip to content

Darwin fix

Darwin fix #263

Workflow file for this run

name: Tests and Build
on:
push:
branches: [main]
tags: [v*]
pull_request:
branches: [main]
env:
ALPINE_IMAGE_NAME: ghcr.io/webmeshproj/node
DISTROLESS_IMAGE_NAME: ghcr.io/webmeshproj/node-distroless
GO_VERSION: ^1.20
PLATFORMS: linux/amd64,linux/arm64,linux/arm
jobs:
tests:
name: Unit Tests
runs-on: ubuntu-latest
permissions:
contents: "read"
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
check-latest: true
cache-dependency-path: go.sum
- name: Download Go Modules
shell: bash
run: go mod download -x
- name: Run Linting
uses: golangci/golangci-lint-action@v3
with:
version: v1.53.2
args: --timeout 10m
skip-pkg-cache: true
- name: Run Unit Tests
shell: bash
run: make test
build-nix-windows:
name: Build Linux/Windows Artifacts
runs-on: ubuntu-latest
needs: [tests]
permissions:
contents: "write"
id-token: "write"
packages: "write"
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 18
- name: Cache Node Modules
uses: actions/cache@v3
with:
path: |
web/dashboard/.yarn/cache
web/dashboard/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('web/dashboard/yarn.lock') }}
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
check-latest: true
cache-dependency-path: go.sum
- name: Download Go Modules
shell: bash
run: go mod download -x
- name: Setup Cosign
uses: sigstore/cosign-installer@main
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Setup Buildx
uses: docker/setup-buildx-action@v2
- name: Build Cross Compiler Image
uses: docker/build-push-action@v3
with:
file: Dockerfile.build
tags: ghcr.io/webmeshproj/node-buildx:latest
load: true
cache-to: type=gha
cache-from: type=gha
- name: Build Release Binaries
shell: bash
env:
BUILD_IMAGE: ghcr.io/webmeshproj/node-buildx:latest
run: make dist-linux-windows
- name: Login to GHCR
uses: docker/login-action@v2
if: ${{ github.event_name != 'pull_request' }}
with:
registry: "ghcr.io"
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Get Image Tags
shell: bash
id: tags
run: |
ALPINE_IMAGES="${ALPINE_IMAGE_NAME}:latest,${ALPINE_IMAGE_NAME}:${{ github.sha }}"
DISTROLESS_IMAGES="${DISTROLESS_IMAGE_NAME}:latest,${DISTROLESS_IMAGE_NAME}:${{ github.sha }}"
if [[ ${{ github.ref_name }} =~ ^v.* ]] ; then
ALPINE_IMAGES+=",${ALPINE_IMAGE_NAME}:${{ github.ref_name }}"
DISTROLESS_IMAGES+=",${DISTROLESS_IMAGE_NAME}:${{ github.ref_name }}"
fi
echo "alpine-images=${ALPINE_IMAGES}" >> "${GITHUB_OUTPUT}"
echo "distroless-images=${DISTROLESS_IMAGES}" >> "${GITHUB_OUTPUT}"
- name: Build and Push Alpine Images
uses: docker/build-push-action@v3
id: alpine-build
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.tags.outputs.alpine-images }}
platforms: ${{ env.PLATFORMS }}
cache-to: type=gha
cache-from: type=gha
- name: Build and Push Distroless Images
uses: docker/build-push-action@v3
id: distroless-build
with:
context: .
file: Dockerfile.distroless
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.tags.outputs.distroless-images }}
platforms: ${{ env.PLATFORMS }}
- name: Sign Images
shell: bash
if: ${{ github.event_name != 'pull_request' }}
env:
COSIGN_EXPERIMENTAL: "1"
run: |
cosign sign --yes --recursive ${ALPINE_IMAGE_NAME}@${{ steps.alpine-build.outputs.digest }}
cosign sign --yes --recursive ${DISTROLESS_IMAGE_NAME}@${{ steps.distroless-build.outputs.digest }}
- name: Upload Artifacts
uses: actions/upload-artifact@v2
with:
name: artifacts-nix-windows
path: dist/*
build-darwin:
name: Build macOS Artifacts
runs-on: macos-12
needs: [tests]
permissions:
contents: "write"
id-token: "write"
packages: "write"
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 18
- name: Cache Node Modules
uses: actions/cache@v3
with:
path: |
web/dashboard/.yarn/cache
web/dashboard/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('web/dashboard/yarn.lock') }}
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
check-latest: true
cache-dependency-path: go.sum
- name: Download Go Modules
shell: bash
run: go mod download -x
- name: Install UPX
shell: bash
run: brew install upx
- name: Build Release Binaries
shell: bash
run: make dist-darwin -j 2
- name: Upload Artifacts
uses: actions/upload-artifact@v2
with:
name: artifacts-darwin
path: dist/*
publish:
name: Publish Artifacts
runs-on: ubuntu-latest
needs: [tests, build-nix-windows, build-darwin]
if: ${{ startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: "write"
id-token: "write"
packages: "write"
steps:
- name: Download Nix/Windows Artifacts
uses: actions/download-artifact@v2
with:
name: artifacts-nix-windows
path: dist
- name: Download macOS Artifacts
uses: actions/download-artifact@v2
with:
name: artifacts-darwin
path: dist
- name: Compute Checksums
shell: bash
run: |
ls -alh dist
cd dist ; sha256sum * > sha256sums.txt
- name: Publish Artifacts
uses: softprops/action-gh-release@v1
with:
name: "Release ${{ github.ref_name }}"
files: |
dist/*