wasilak/go-hello-world

View on GitHub
.github/workflows/main.yml

Summary

Maintainability
Test Coverage
name: CI

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [main]
    tags:
      - "*"
    paths-ignore:
      - "charts/**"
  pull_request:
    branches: [main]
    paths-ignore:
      - "charts/**"

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    strategy:
      matrix:
        os: [linux, darwin]
        arch: [amd64, arm64]

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v4

      - name: Setup Go environment
        uses: actions/setup-go@v5
        with:
          go-version-file: go.mod
          cache-dependency-path: go.sum

      - name: Build executable
        run: |
          mkdir -p ./dist
          go build -o ./dist/go-hello-world
        env:
          GOOS: ${{ matrix.os }}
          GOARCH: ${{ matrix.arch }}

      - name: Test
        run: go test -v ./...

      - name: compress executable
        run: |
          cd ./dist
          chmod +x go-hello-world
          zip go-hello-world-${{ matrix.os }}-${{ matrix.arch }}.zip go-hello-world
          ls -lha .

      - name: Release
        uses: softprops/action-gh-release@v2
        if: startsWith(github.ref, 'refs/tags/')
        with:
          generate_release_notes: true
          repository: wasilak/go-hello-world
          files: |
            dist/go-hello-world*.zip