diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000..016cfb3 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,40 @@ +# This workflow will build a golang project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go + +name: Go + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.19 + + - name: Build + run: go build -v ./... + + - name: Test + run: go test -v -coverprofile=coverage.txt -covermode=atomic ./... + + - shell: bash + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + run: | + # Replace `linux` below with the appropriate OS + # Options are `alpine`, `linux`, `macos`, `windows` + # You will need to setup the environment variables below in github + # and the project in codecov.io + curl -Os https://uploader.codecov.io/latest/linux/codecov + chmod +x codecov + CODECOV_TOKEN=$CODECOV_TOKEN ./codecov diff --git a/README.md b/README.md index b50f8bc..607c0dd 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,21 @@ # go-module-template +[![go.dev reference](https://pkg.go.dev/badge/github.com/soypat/go-module-template)](https://pkg.go.dev/github.com/soypat/go-module-template) +[![Go Report Card](https://goreportcard.com/badge/github.com/soypat/go-module-template)](https://goreportcard.com/report/github.com/soypat/go-module-template) + +[![codecov](https://codecov.io/gh/soypat/go-module-template/branch/main/graph/badge.svg)](https://codecov.io/gh/soypat/go-module-template) + Go module template with instructions on how to make your code importable and setting up codecov CI. + +## First steps +Fix `go.mod` file by replacing `github.com/YOURUSER/YOURREPONAME` with your corresponding project repository link. + +## Setting up codecov CI +This instructive will allow for tests to run on pull requests and pushes to your repository. + +1. Create an account on [codecov.io](https://app.codecov.io/) + +2. Setup repository on codecov and obtain the CODECOV_TOKEN token, which is a string of base64 characters. + +3. Open up the github repository for this project and go to `Settings -> Secrets and variables -> Actions`. Once there create a New Repository Secret. Name it `CODECOV_TOKEN` and copy paste the token obtained in the previous step in the `secret` input box. Click "Add secret". + + diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..72631d7 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/YOURUSER/YOURREPONAME + +go 1.20 diff --git a/module.go b/module.go new file mode 100644 index 0000000..4b77a3b --- /dev/null +++ b/module.go @@ -0,0 +1,10 @@ +package gomoduletemplate + +// Fibonacci returns the nth number in the Fibonacci sequence. +func Fibonacci(n int) int { + a, b := 0, 1 + for i := 0; i < n; i++ { + a, b = b, a+b + } + return a +} diff --git a/module_test.go b/module_test.go new file mode 100644 index 0000000..85a1b98 --- /dev/null +++ b/module_test.go @@ -0,0 +1,21 @@ +package gomoduletemplate_test + +import ( + "testing" + + gomoduletemplate "github.com/YOURUSER/YOURREPONAME" +) + +func TestWorkingGoInstall(t *testing.T) { + t.Log("Your go installation works!") +} + +func TestFibonacci(t *testing.T) { + var sequence = []int{0, 1, 1, 2, 3, 5, 8, 13, 21, 34} + for nth, expected := range sequence { + got := gomoduletemplate.Fibonacci(nth) + if got != expected { + t.Errorf("Fibonacci(%d) = %d, expected %d", nth, got, expected) + } + } +}