Compare commits

...

4 commits

Author SHA1 Message Date
62af1743f6 Apply only on opt-in services
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2026-05-14 20:42:49 +08:00
7b25ab96a9 Add CI/CD pipeline
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-10 19:07:31 +08:00
db638aac1e Include rules section 2026-04-30 09:17:23 +07:00
5e7bd443c4 Only apply to services 2026-04-29 18:46:43 +07:00
4 changed files with 223 additions and 3 deletions

22
.drone-manifest.yml Normal file
View file

@ -0,0 +1,22 @@
image: happydomain/checker-happydeliver:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
{{#if build.tags}}
tags:
{{#each build.tags}}
- {{this}}
{{/each}}
{{/if}}
manifests:
- image: happydomain/checker-happydeliver:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-amd64
platform:
architecture: amd64
os: linux
- image: happydomain/checker-happydeliver:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm64
platform:
architecture: arm64
os: linux
variant: v8
- image: happydomain/checker-happydeliver:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm
platform:
architecture: arm
os: linux
variant: v7

187
.drone.yml Normal file
View file

@ -0,0 +1,187 @@
---
kind: pipeline
type: docker
name: build-amd64
platform:
os: linux
arch: amd64
steps:
- name: checker build
image: golang:1-alpine
commands:
- apk add --no-cache git make
- make
environment:
CHECKER_VERSION: "${DRONE_BRANCH}-${DRONE_COMMIT}"
CGO_ENABLED: 0
when:
event:
exclude:
- tag
- name: checker build tag
image: golang:1-alpine
commands:
- apk add --no-cache git make
- make
environment:
CHECKER_VERSION: "${DRONE_SEMVER}"
CGO_ENABLED: 0
when:
event:
- tag
- name: publish on Docker Hub
image: plugins/docker
settings:
repo: happydomain/checker-happydeliver
auto_tag: true
auto_tag_suffix: ${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH}
dockerfile: Dockerfile
build_args:
- CHECKER_VERSION=${DRONE_BRANCH}-${DRONE_COMMIT}
username:
from_secret: docker_username
password:
from_secret: docker_password
when:
event:
exclude:
- tag
- name: publish on Docker Hub (tag)
image: plugins/docker
settings:
repo: happydomain/checker-happydeliver
auto_tag: true
auto_tag_suffix: ${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH}
dockerfile: Dockerfile
build_args:
- CHECKER_VERSION=${DRONE_SEMVER}
username:
from_secret: docker_username
password:
from_secret: docker_password
when:
event:
- tag
trigger:
branch:
exclude:
- renovate/*
event:
- cron
- push
- tag
---
kind: pipeline
type: docker
name: build-arm64
platform:
os: linux
arch: arm64
steps:
- name: checker build
image: golang:1-alpine
commands:
- apk add --no-cache git make
- make
environment:
CHECKER_VERSION: "${DRONE_BRANCH}-${DRONE_COMMIT}"
CGO_ENABLED: 0
when:
event:
exclude:
- tag
- name: checker build tag
image: golang:1-alpine
commands:
- apk add --no-cache git make
- make
environment:
CHECKER_VERSION: "${DRONE_SEMVER}"
CGO_ENABLED: 0
when:
event:
- tag
- name: publish on Docker Hub
image: plugins/docker
settings:
repo: happydomain/checker-happydeliver
auto_tag: true
auto_tag_suffix: ${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH}
dockerfile: Dockerfile
build_args:
- CHECKER_VERSION=${DRONE_BRANCH}-${DRONE_COMMIT}
username:
from_secret: docker_username
password:
from_secret: docker_password
when:
event:
exclude:
- tag
- name: publish on Docker Hub (tag)
image: plugins/docker
settings:
repo: happydomain/checker-happydeliver
auto_tag: true
auto_tag_suffix: ${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH}
dockerfile: Dockerfile
build_args:
- CHECKER_VERSION=${DRONE_SEMVER}
username:
from_secret: docker_username
password:
from_secret: docker_password
when:
event:
- tag
trigger:
event:
- cron
- push
- tag
---
kind: pipeline
name: docker-manifest
platform:
os: linux
arch: arm64
steps:
- name: publish on Docker Hub
image: plugins/manifest
settings:
auto_tag: true
ignore_missing: true
spec: .drone-manifest.yml
username:
from_secret: docker_username
password:
from_secret: docker_password
trigger:
branch:
exclude:
- renovate/*
event:
- cron
- push
- tag
depends_on:
- build-amd64
- build-arm64

View file

@ -49,6 +49,19 @@ Defaults: `overall=70`, `dns=70`, `authentication=80`, `spam=70`,
`blacklist=90`, `header=70`, `content=60`. Each can be customised through
the rule options shown in the happyDomain UI.
## Rules
| Code | Description | Severity |
|---------------------------------------|---------------------------------------------------------------------------------------------------|----------|
| `happydeliver.score.overall` | Verifies happyDeliver's Overall score is above the configured minimum. | CRITICAL |
| `happydeliver.score.dns` | Verifies happyDeliver's DNS score is above the configured minimum. | CRITICAL |
| `happydeliver.score.authentication` | Verifies happyDeliver's Authentication (SPF/DKIM/DMARC) score is above the configured minimum. | CRITICAL |
| `happydeliver.score.spam` | Verifies happyDeliver's Spam filters score is above the configured minimum. | CRITICAL |
| `happydeliver.score.blacklist` | Verifies happyDeliver's Blacklists score is above the configured minimum. | CRITICAL |
| `happydeliver.score.header` | Verifies happyDeliver's Headers score is above the configured minimum. | CRITICAL |
| `happydeliver.score.content` | Verifies happyDeliver's Content score is above the configured minimum. | CRITICAL |
| `happydeliver.lifecycle` | Reports happyDeliver lifecycle errors (allocation, send, timeout, fetch). | CRITICAL |
## Metrics
One `happydeliver_score` metric per section, labelled with `section=<name>`

View file

@ -14,9 +14,7 @@ func Definition() *sdk.CheckerDefinition {
Name: "Outbound deliverability (via happyDeliver)",
Version: Version,
Availability: sdk.CheckerAvailability{
ApplyToDomain: true,
ApplyToService: true,
LimitToServices: []string{"svcs.MXs"},
ApplyToService: true,
},
ObservationKeys: []sdk.ObservationKey{ObservationKeyHappyDeliver},
Options: sdk.CheckerOptionsDocumentation{