Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ecce959
Potential fix for code scanning alert no. 2: Workflow does not contai…
DrMattChristian Sep 17, 2025
1ba5b1b
Potential fix for code scanning alert no. 1: Workflow does not contai…
DrMattChristian Sep 17, 2025
2518399
Merge branch 'StJudeWasHere:main' into main
DrMattChristian Sep 17, 2025
914ac09
Bump golang.org/x/crypto in the go_modules group across 1 directory
dependabot[bot] Nov 20, 2025
a543e01
Merge branch 'StJudeWasHere:main' into main
DrMattChristian Jun 15, 2026
4a17e8d
Merge remote-tracking branch 'origin/main' into dependabot/go_modules…
Copilot Jun 15, 2026
3fdb52e
Merge pull request #1 from DrMattChristian/dependabot/go_modules/go_m…
DrMattChristian Jun 15, 2026
ac15641
Pin all GitHub Actions to full-length commit SHAs
Copilot Jun 16, 2026
2fdff4e
Merge pull request #2 from DrMattChristian/copilot/fix-action-errors-…
DrMattChristian Jun 16, 2026
d6bbd9a
Build multi-arch container images
DrMattChristian Jun 23, 2026
824f9b2
Reduce QEMU emulation scope in build workflow
DrMattChristian Jun 23, 2026
187cbf1
Merge pull request #3 from DrMattChristian/drmattchristian-investigat…
DrMattChristian Jun 23, 2026
cfeebb8
Fix Docker workflow for forked builds
Copilot Jun 23, 2026
b5df439
Merge pull request #4 from DrMattChristian/copilot/fix-github-actions…
DrMattChristian Jun 23, 2026
32bc014
Update GitHub Actions to Node 24 SHAs (#5)
DrMattChristian Jun 23, 2026
f100933
Add manual Docker image tags and OCI description (#6)
DrMattChristian Jun 23, 2026
bc4d22d
Improve Docker workflow and Node runtime (#7)
DrMattChristian Jun 24, 2026
d2990e6
Pin MySQL image to 8.4.10 (#8)
DrMattChristian Jun 24, 2026
02822fc
Update annotations for description fields
DrMattChristian Jun 26, 2026
e02401e
Bump golang.org/x/net from 0.54.0 to 0.55.0 in the go_modules group a…
dependabot[bot] Aug 27, 2026
836d9b4
Bump golang.org/x/crypto from 0.51.0 to 0.55.0 in the go_modules grou…
dependabot[bot] Aug 27, 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
82 changes: 67 additions & 15 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
name: Build and Push Docker Image

on:
workflow_dispatch:
inputs:
manual_tag:
description: "Optional tag to publish for this manual run (for example: manual-20260623)"
required: false
type: string
platforms:
description: "Platforms to build for this manual run"
required: false
default: linux/amd64
type: choice
options:
- linux/amd64
- linux/amd64,linux/arm64
push:
branches: [main, develop]
pull_request:
Expand All @@ -13,12 +27,14 @@ env:
jobs:
test:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd

- name: Set up Go
uses: actions/setup-go@v6
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: go.mod

Expand All @@ -37,40 +53,76 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd

- name: Determine build platform selection
id: platform
shell: bash
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
platforms="${{ github.event.inputs.platforms }}"
elif [ "${{ github.event_name }}" = "pull_request" ]; then
platforms="linux/amd64"
elif [ "${{ github.ref_name }}" = "${{ github.event.repository.default_branch }}" ]; then
platforms="linux/amd64,linux/arm64"
else
platforms="linux/amd64"
fi

echo "platforms=$platforms" >> "$GITHUB_OUTPUT"

if [[ "$platforms" == *"linux/arm64"* ]]; then
echo "needs_qemu=true" >> "$GITHUB_OUTPUT"
else
echo "needs_qemu=false" >> "$GITHUB_OUTPUT"
fi

- name: Set up QEMU
if: steps.platform.outputs.needs_qemu == 'true'
uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3
with:
platforms: arm64
cache-image: false

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5

- name: Log in to Container Registry
uses: docker/login-action@v3
if: github.event_name == 'workflow_dispatch' || (github.event_name != 'pull_request' && !github.event.repository.fork)
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
username: ${{ secrets.GHCR_TOKEN != '' && github.repository_owner || github.actor }}
password: ${{ secrets.GHCR_TOKEN || secrets.GITHUB_TOKEN }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@80c7e94dd9b9319bd5eb7a0e0fe9291e23a2a2e9
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=sha,prefix={{branch}}-,format=short,enable={{is_default_branch}}
type=raw,value=latest,enable={{is_default_branch}}
type=raw,value=manual-${{ github.run_number }}-${{ github.run_attempt }},enable=${{ github.event_name == 'workflow_dispatch' }}
type=raw,value=${{ github.event.inputs.manual_tag }},enable=${{ github.event_name == 'workflow_dispatch' && github.event.inputs.manual_tag != '' }}
annotations: |
index:org.opencontainers.image.description=SEOnaut is an open-source SEO auditing tool for scanning websites and generating SEO reports.
manifest:org.opencontainers.image.description=SEOnaut is an open-source SEO auditing tool for scanning websites and generating SEO reports.

- name: Build and push Docker image
uses: docker/build-push-action@v6
- name: Build and optionally push Docker image
uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf
with:
context: .
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
platforms: ${{ steps.platform.outputs.platforms }}
push: ${{ github.event_name == 'workflow_dispatch' || (github.event_name != 'pull_request' && !github.event.repository.fork) }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
annotations: ${{ steps.meta.outputs.annotations }}
cache-from: type=gha,scope=${{ github.workflow }}-${{ github.job }}
cache-to: type=gha,mode=max,scope=${{ github.workflow }}-${{ github.job }},ignore-error=true
build-args: |
VERSION=${{ github.ref_name }}
COMMIT_HASH=${{ github.sha }}
BUILD_DATE=${{ github.event.head_commit.timestamp }}
BUILD_DATE=${{ github.event.head_commit.timestamp || github.run_started_at }}
6 changes: 4 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
name: Test
permissions:
contents: read

on:
push:
Expand All @@ -18,12 +20,12 @@ jobs:

steps:
- name: Set up Go
uses: actions/setup-go@v5
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version: ${{ matrix.go }}

- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd

- name: Test
run: go test -race -parallel 1 -short ./internal/...
Expand Down
4 changes: 3 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \
CGO_ENABLED=0 GOOS=linux \
go build -o seonaut cmd/server/main.go

FROM node:18-alpine3.18 AS front
FROM node:24-alpine3.22 AS front

WORKDIR /home/node
COPY ./web ./app/web
Expand All @@ -29,6 +29,8 @@ RUN --mount=type=cache,target=/root/.npm \

FROM alpine:latest AS production

LABEL org.opencontainers.image.description="SEOnaut is an open-source SEO auditing tool for scanning websites and generating SEO reports."

COPY --from=builder /app/seonaut /app/seonaut
COPY --from=front /home/node/app /app/

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Using docker is the recommended way of running SEOnaut. As you need to provide a
```yml
services:
db:
image: mysql:8.4
image: mysql:8.4.10
container_name: "SEOnaut-db"
environment:
- MYSQL_ROOT_PASSWORD=root
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
services:
db:
image: mysql:8.4
image: mysql:8.4.10
container_name: "SEOnaut-db"
environment:
- MYSQL_ROOT_PASSWORD=root
Expand Down
2 changes: 1 addition & 1 deletion docs/INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Using docker is the recommended way of running SEOnaut. As you need to provide a
```yml
services:
db:
image: mysql:8.4
image: mysql:8.4.10
container_name: "SEOnaut-db"
environment:
- MYSQL_ROOT_PASSWORD=root
Expand Down
12 changes: 5 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ require (
github.com/spf13/viper v1.21.0
github.com/temoto/robotstxt v1.1.2
github.com/turk/go-sitemap v0.0.0-20210912154218-82ad01095e30
golang.org/x/crypto v0.51.0
golang.org/x/net v0.54.0
golang.org/x/text v0.37.0
golang.org/x/crypto v0.55.0
golang.org/x/net v0.58.0
golang.org/x/text v0.41.0
gopkg.in/yaml.v3 v3.0.1
)

Expand All @@ -32,15 +32,13 @@ require (
github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
github.com/gorilla/css v1.0.1 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/pelletier/go-toml/v2 v2.3.1 // indirect
github.com/sagikazarmark/locafero v0.12.0 // indirect
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
github.com/spf13/afero v1.15.0 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/sys v0.44.0 // indirect
golang.org/x/sys v0.47.0 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
)
Loading