Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file added .DS_Store
Binary file not shown.
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
PORT="8080"
34 changes: 34 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: cd

on:
push:
branches: [main]

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

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

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.25.1"

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

- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}

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

- name: Build and push Docker image
run: |
gcloud builds submit --tag us-central1-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/notely-repo/notely:latest .
22 changes: 22 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: ci

on:
pull_request:
branches: [main]

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

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

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.25.1"

- name: Run tests
run: go test -cover ./...
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
![CI Tests](https://github.com/Jay-Jay-Capacity/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!

Fortune's version of Boot.dev's Notely app.
100 changes: 100 additions & 0 deletions coverage.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
mode: set
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:12.99,14.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:14.16,17.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:19.2,20.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:20.16,23.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:25.2,25.46 1 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:28.102,35.16 5 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:35.16,38.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:40.2,48.16 3 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:48.16,51.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:53.2,54.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:54.16,57.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:59.2,60.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:60.16,63.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_notes.go:65.2,65.50 1 0
github.com/bootdotdev/learn-cicd-starter/handler_ready.go:5.63,7.2 1 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:15.82,22.16 5 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:22.16,25.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:27.2,28.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:28.16,31.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:33.2,40.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:40.16,43.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:45.2,46.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:46.16,49.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:51.2,52.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:52.16,55.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:56.2,56.50 1 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:59.49,62.16 3 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:62.16,64.3 1 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:65.2,67.24 3 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:70.99,73.16 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:73.16,76.3 2 0
github.com/bootdotdev/learn-cicd-starter/handler_user.go:78.2,78.45 1 0
github.com/bootdotdev/learn-cicd-starter/json.go:9.82,10.19 1 0
github.com/bootdotdev/learn-cicd-starter/json.go:10.19,12.3 1 0
github.com/bootdotdev/learn-cicd-starter/json.go:13.2,13.16 1 0
github.com/bootdotdev/learn-cicd-starter/json.go:13.16,15.3 1 0
github.com/bootdotdev/learn-cicd-starter/json.go:16.2,21.4 2 0
github.com/bootdotdev/learn-cicd-starter/json.go:24.76,27.16 3 0
github.com/bootdotdev/learn-cicd-starter/json.go:27.16,31.3 3 0
github.com/bootdotdev/learn-cicd-starter/json.go:32.2,33.14 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:27.13,29.16 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:29.16,31.3 1 0
github.com/bootdotdev/learn-cicd-starter/main.go:33.2,34.16 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:34.16,36.3 1 0
github.com/bootdotdev/learn-cicd-starter/main.go:38.2,43.17 3 0
github.com/bootdotdev/learn-cicd-starter/main.go:43.17,46.3 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:46.8,48.17 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:48.17,50.4 1 0
github.com/bootdotdev/learn-cicd-starter/main.go:51.3,53.40 3 0
github.com/bootdotdev/learn-cicd-starter/main.go:56.2,67.63 3 0
github.com/bootdotdev/learn-cicd-starter/main.go:67.63,69.17 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:69.17,72.4 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:73.3,74.42 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:74.42,76.4 1 0
github.com/bootdotdev/learn-cicd-starter/main.go:79.2,81.22 2 0
github.com/bootdotdev/learn-cicd-starter/main.go:81.22,86.3 4 0
github.com/bootdotdev/learn-cicd-starter/main.go:88.2,97.33 5 0
github.com/bootdotdev/learn-cicd-starter/middleware_auth.go:12.78,13.54 1 0
github.com/bootdotdev/learn-cicd-starter/middleware_auth.go:13.54,15.17 2 0
github.com/bootdotdev/learn-cicd-starter/middleware_auth.go:15.17,18.4 2 0
github.com/bootdotdev/learn-cicd-starter/middleware_auth.go:20.3,21.17 2 0
github.com/bootdotdev/learn-cicd-starter/middleware_auth.go:21.17,24.4 2 0
github.com/bootdotdev/learn-cicd-starter/middleware_auth.go:26.3,26.22 1 0
github.com/bootdotdev/learn-cicd-starter/models.go:17.59,19.16 2 0
github.com/bootdotdev/learn-cicd-starter/models.go:19.16,21.3 1 0
github.com/bootdotdev/learn-cicd-starter/models.go:23.2,24.16 2 0
github.com/bootdotdev/learn-cicd-starter/models.go:24.16,26.3 1 0
github.com/bootdotdev/learn-cicd-starter/models.go:27.2,33.8 1 0
github.com/bootdotdev/learn-cicd-starter/models.go:44.59,46.16 2 0
github.com/bootdotdev/learn-cicd-starter/models.go:46.16,48.3 1 0
github.com/bootdotdev/learn-cicd-starter/models.go:50.2,51.16 2 0
github.com/bootdotdev/learn-cicd-starter/models.go:51.16,53.3 1 0
github.com/bootdotdev/learn-cicd-starter/models.go:54.2,60.8 1 0
github.com/bootdotdev/learn-cicd-starter/models.go:63.66,65.29 2 0
github.com/bootdotdev/learn-cicd-starter/models.go:65.29,68.17 3 0
github.com/bootdotdev/learn-cicd-starter/models.go:68.17,70.4 1 0
github.com/bootdotdev/learn-cicd-starter/models.go:73.2,73.20 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/db.go:19.28,21.2 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/db.go:27.47,31.2 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:25.79,34.2 2 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:41.73,52.2 4 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:59.87,61.16 2 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:61.16,63.3 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:64.2,66.18 3 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:66.18,74.17 2 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:74.17,76.4 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:77.3,77.27 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:79.2,79.37 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:79.37,81.3 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:82.2,82.35 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:82.35,84.3 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/notes.sql.go:85.2,85.19 1 0
github.com/bootdotdev/learn-cicd-starter/internal/database/users.sql.go:31.79,40.2 2 0
github.com/bootdotdev/learn-cicd-starter/internal/database/users.sql.go:47.77,58.2 4 0
github.com/bootdotdev/learn-cicd-starter/internal/auth/auth.go:12.53,14.22 2 1
github.com/bootdotdev/learn-cicd-starter/internal/auth/auth.go:14.22,16.3 1 1
github.com/bootdotdev/learn-cicd-starter/internal/auth/auth.go:17.2,18.52 2 1
github.com/bootdotdev/learn-cicd-starter/internal/auth/auth.go:18.52,20.3 1 1
github.com/bootdotdev/learn-cicd-starter/internal/auth/auth.go:22.2,22.26 1 1
Binary file added internal/.DS_Store
Binary file not shown.
47 changes: 47 additions & 0 deletions internal/auth/auth_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package auth

import (
"net/http"
"testing"
)

// TestGetAPIKey tests the GetAPIKey function.
func TestGetAPIKey(t *testing.T) {
// Sub-test for a valid, well-formed Authorization header.
t.Run("Valid API Key", func(t *testing.T) {
headers := http.Header{}
headers.Set("Authorization", "ApiKey my-secret-key")

key, err := GetAPIKey(headers)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
if key != "my-secret-key" {
t.Errorf("expected key to be 'my-secret-key', got '%s'", key)
}
})

// Sub-test for a missing Authorization header.
t.Run("No Auth Header", func(t *testing.T) {
headers := http.Header{}

_, err := GetAPIKey(headers)
if err == nil {
t.Fatal("expected an error, but got none")
}
if err != ErrNoAuthHeaderIncluded {
t.Errorf("expected error '%v', got '%v'", ErrNoAuthHeaderIncluded, err)
}
})

// Sub-test for a malformed Authorization header.
t.Run("Malformed Auth Header", func(t *testing.T) {
headers := http.Header{}
headers.Set("Authorization", "Bearer some-other-token")

_, err := GetAPIKey(headers)
if err == nil {
t.Fatal("expected an error, but got none")
}
})
}
Binary file added sql/.DS_Store
Binary file not shown.
Binary file added vendor/.DS_Store
Binary file not shown.