Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
d161057
little change
MarunDArbaumont Aug 24, 2026
beb5e05
ci file and github dir to repo
MarunDArbaumont Aug 24, 2026
37dafb9
changed the force failure
MarunDArbaumont Aug 24, 2026
b432aba
tests and ci test
MarunDArbaumont Aug 25, 2026
7301f6f
fixed the failed tests
MarunDArbaumont Aug 25, 2026
e11f46d
added coverage to ci
MarunDArbaumont Aug 25, 2026
bd250f3
add badge for tests status
MarunDArbaumont Aug 25, 2026
975c447
Merge pull request #1 from MarunDArbaumont/addtests
MarunDArbaumont Aug 25, 2026
ca92b39
added formatting check on ci
MarunDArbaumont Aug 27, 2026
474055c
linting check with error to test
MarunDArbaumont Aug 27, 2026
a8b8d22
forgot white space
MarunDArbaumont Aug 27, 2026
43c0195
fixed the error
MarunDArbaumont Aug 27, 2026
8075287
add gosec check to ci
MarunDArbaumont Sep 1, 2026
db26ecc
fixed the securtiy errors
MarunDArbaumont Sep 1, 2026
7ec0c9f
added cd
MarunDArbaumont Sep 1, 2026
17354b2
Merge pull request #2 from MarunDArbaumont/addtests
MarunDArbaumont Sep 1, 2026
14a9384
forgot to tab
MarunDArbaumont Sep 1, 2026
fb2deb6
Merge pull request #3 from MarunDArbaumont/addtests
MarunDArbaumont Sep 1, 2026
f390d60
added build to gcloud
MarunDArbaumont Sep 2, 2026
ee1d5e1
Merge pull request #4 from MarunDArbaumont/addtests
MarunDArbaumont Sep 2, 2026
5b47863
changes to auto deploy
MarunDArbaumont Sep 3, 2026
0d0d126
Merge pull request #5 from MarunDArbaumont/addtests
MarunDArbaumont Sep 3, 2026
13c699a
connecting to database and automate migrations
MarunDArbaumont Sep 3, 2026
88fd5cc
Merge pull request #6 from MarunDArbaumont/addtests
MarunDArbaumont Sep 3, 2026
088aa67
small change to retriger ci and cd
MarunDArbaumont Sep 3, 2026
033ad82
Merge pull request #7 from MarunDArbaumont/addtests
MarunDArbaumont Sep 3, 2026
b7c3aa7
reverted changes
MarunDArbaumont Sep 3, 2026
db90270
Merge pull request #8 from MarunDArbaumont/addtests
MarunDArbaumont Sep 3, 2026
de5dcdf
change the go version of cd
MarunDArbaumont Sep 3, 2026
9477a1e
Merge pull request #9 from MarunDArbaumont/addtests
MarunDArbaumont Sep 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: cd

on:
push:
branches: [main]

jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest

env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}


steps:
- name: Check out code
uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.27.1"

- name: Build app
run: ./scripts/buildprod.sh

- id: 'auth'
uses: 'google-github-actions/auth@v2'
with:
credentials_json: '${{ secrets.GCP_CREDENTIALS }}'

- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v3'

- name: 'Use gcloud CLI'
run: 'gcloud info'

- name: Build to gcloud
run: gcloud builds submit --tag us-central1-docker.pkg.dev/notely-507309/notely-ar-repo/notely:latest .

- name: Install goose
run: go install github.com/pressly/goose/v3/cmd/goose@latest

- name: Migrations to database
run: ./scripts/migrateup.sh

- name: Git diff
run: git diff

- name: Deploy to Cloud Run
run: gcloud run deploy notely --image us-central1-docker.pkg.dev/notely-507309/notely-ar-repo/notely:latest --region us-central1 --allow-unauthenticated --project notely-507309 --max-instances=4
50 changes: 50 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: ci

on:
pull_request:
branches: [main]

jobs:
tests:
name: Tests
runs-on: ubuntu-latest

steps:
- name: Check out code
uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.0"

- name: Test Go code with coverage
run: go test -cover ./...

- name: Install gosec
run: go install github.com/securego/gosec/v2/cmd/gosec@latest

- name: Security check
run: gosec ./...

style:
name: Style
runs-on: ubuntu-latest

steps:
- name: Check out code
uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.0"

- name: Check code formatting
run: test -z $(go fmt ./...)

- name: Install staticcheck
run: go install honnef.co/go/tools/cmd/staticcheck@latest

- name: Check code for linting errors
run: staticcheck ./...
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
![Test badge](https://github.com/MarunDArbaumont/learn-cicd-starter/actions/workflows/ci.yml/badge.svg)

# learn-cicd-starter (Notely)

This repo contains the starter code for the "Notely" application for the "Learn CICD" course on [Boot.dev](https://boot.dev).
Expand All @@ -21,3 +23,5 @@ go build -o notely && ./notely
*This starts the server in non-database mode.* It will serve a simple webpage at `http://localhost:8080`.

You do *not* need to set up a database or any interactivity on the webpage yet. Instructions for that will come later in the course!

Marun's version of Boot.dev's Notely app.
62 changes: 62 additions & 0 deletions internal/auth/get_api_key_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package auth

import (
"fmt"
"net/http"
"strings"
"testing"
)

func TestGetAPIKey(t *testing.T) {
tests := []struct {
key string
value string
expect string
expectErr string
}{
{
expectErr: "no authorization header",
},
{
key: "Authorization",
expectErr: "no authorization header",
},
{
key: "Authorization",
value: "-",
expectErr: "malformed authorization header",
},
{
key: "Authorization",
value: "Bearer xxxxxx",
expectErr: "malformed authorization header",
},
{
key: "Authorization",
value: "ApiKey xxxxxx",
expect: "xxxxxx",
expectErr: "not expecting an error",
},
}

for i, test := range tests {
t.Run(fmt.Sprintf("TestGetAPIKey Case #%v:", i), func(t *testing.T) {
header := http.Header{}
header.Add(test.key, test.value)

output, err := GetAPIKey(header)
if err != nil {
if strings.Contains(err.Error(), test.expectErr) {
return
}
t.Errorf("Unexpected: TestGetAPIKey:%v\n", err)
return
}

if output != test.expect {
t.Errorf("Unexpected: TestGetAPIKey:%s", output)
return
}
})
}
}
5 changes: 4 additions & 1 deletion json.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,8 @@ func respondWithJSON(w http.ResponseWriter, code int, payload interface{}) {
return
}
w.WriteHeader(code)
w.Write(dat)
_, err = w.Write(dat)
if err != nil {
log.Printf("Critical error writing response: %s", err)
}
}
10 changes: 6 additions & 4 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import (
"log"
"net/http"
"os"
"strconv"
"time"

"github.com/go-chi/chi"
"github.com/go-chi/cors"
Expand Down Expand Up @@ -89,10 +91,10 @@ func main() {

router.Mount("/v1", v1Router)
srv := &http.Server{
Addr: ":" + port,
Handler: router,
Addr: ":" + port,
Handler: router,
ReadTimeout: 15 * time.Second,
}

log.Printf("Serving on port: %s\n", port)
log.Printf("Serving on port: %s", strconv.Quote(port))
log.Fatal(srv.ListenAndServe())
}
2 changes: 1 addition & 1 deletion static/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</head>

<body class="section">
<h1>Notely</h1>
<h1>Welcome to Notely</h1>

<div id="userCreationContainer" class="section">
<input id="nameField" type="text" placeholder="Enter your name">
Expand Down