diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..2409d98 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Report a bug in this plugin +title: '[Bug] ' +labels: bug +assignees: '' +--- + +## Describe the bug + +A clear and concise description of what the bug is. + +## To reproduce + +Steps to reproduce the behavior: +1. Config used (redact any secrets) +2. Command run +3. Error output + +## Expected behavior + +What you expected to happen. + +## Environment + +- workflow engine version: +- plugin version: +- Go version: +- OS: + +## Additional context + +Add any other context or logs here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bfcf5e9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,27 @@ +--- +name: Feature request +about: Suggest a new capability for this plugin +title: '[Feature] ' +labels: enhancement +assignees: '' +--- + +## Summary + +A one-sentence description of the feature. + +## Motivation + +Why is this feature needed? What problem does it solve? + +## Proposed solution + +How would you like it to work? Include config schema changes if relevant. + +## Alternatives considered + +Any alternative approaches you considered and why you ruled them out. + +## Additional context + +Links, screenshots, or related issues. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a510115 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +## Summary + + + +## Motivation + + + +## Test plan + +- [ ] `go build ./...` passes +- [ ] `go vet ./...` passes +- [ ] `go test ./...` passes +- [ ] Manual smoke test (describe) + +## Checklist + +- [ ] CHANGELOG.md updated (Keep-a-Changelog format) +- [ ] No secrets or credentials included +- [ ] One feature or bugfix per PR diff --git a/CHANGELOG.md b/CHANGELOG.md index 014b7ed..a8849de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,11 @@ Eliminates the runtime-failure surface (sentinel-stub returning `ErrApplyV1Remov ## [Unreleased] +### Added + +- README verified-status banner per workflow#714 (multi-repo QoL sweep). +- CONTRIBUTING.md, examples/minimal/config.yaml, and GitHub issue/PR templates. + ### Fixed - **App Platform worker private image pulls** — `workers[].image` now applies diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..4e087d0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,27 @@ +# Contributing to workflow-plugin-digitalocean + +This plugin is part of the [GoCodeAlone/workflow](https://github.com/GoCodeAlone/workflow) ecosystem. + +## Before contributing + +Read the [upstream CONTRIBUTING.md](https://github.com/GoCodeAlone/workflow/blob/main/CONTRIBUTING.md) for general conventions, signing, and review expectations. + +## Local development + +```sh +git clone https://github.com/GoCodeAlone/workflow-plugin-digitalocean.git +cd workflow-plugin-digitalocean +go build ./... +go test ./... +``` + +## Pull requests + +- One feature or bugfix per PR. +- Update CHANGELOG.md with a Keep-a-Changelog entry. +- Add tests covering new behavior. +- Run `go vet ./...` before pushing. + +## Reporting issues + +See the issue templates under `.github/ISSUE_TEMPLATE/`. diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ecc512 --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +# workflow-plugin-digitalocean + +> ✅ **Verified** — used in production at **buymywishlist, core-dump, workflow-compute**. This plugin has been validated end-to-end in a merged main-branch wfctl.yaml of an active GoCodeAlone project. + +DigitalOcean IaC provider for the [GoCodeAlone/workflow](https://github.com/GoCodeAlone/workflow) engine. Manages App Platform, DOKS, databases, Redis cache, load balancers, VPC, firewall, DNS, Spaces, DOCR, certificates, Droplets, Block Storage volumes, IAM (declared), and API gateway resources via `wfctl infra`. + +## Supported resource types + +| Type | Description | +|------|-------------| +| `infra.container_service` | DigitalOcean App Platform service | +| `infra.k8s_cluster` | DigitalOcean Kubernetes (DOKS) | +| `infra.database` | Managed database (PostgreSQL, MySQL, Redis, MongoDB) | +| `infra.cache` | Managed Redis cache | +| `infra.load_balancer` | Load balancer | +| `infra.vpc` | Virtual Private Cloud | +| `infra.firewall` | Cloud firewall (Droplet/DOKS tag-based) | +| `infra.dns` | DNS domain + records | +| `infra.storage` | Spaces object storage | +| `infra.registry` | DigitalOcean Container Registry (DOCR) | +| `infra.certificate` | TLS certificate | +| `infra.droplet` | Droplet (VM) | +| `infra.volume` | Block Storage volume | +| `infra.iam_role` | IAM role (declarative) | +| `infra.api_gateway` | API gateway | + +## Quick start + +See [`examples/minimal/config.yaml`](examples/minimal/config.yaml) for a minimal working configuration. + +```sh +wfctl infra plan --env staging +wfctl infra apply --env staging +``` + +## Requirements + +- workflow engine ≥ `0.57.1` +- `DIGITALOCEAN_TOKEN` environment variable set to a valid DO personal access token + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md). diff --git a/examples/minimal/config.yaml b/examples/minimal/config.yaml new file mode 100644 index 0000000..a7ab664 --- /dev/null +++ b/examples/minimal/config.yaml @@ -0,0 +1,32 @@ +# Minimal workflow-plugin-digitalocean example. +# Provisions a single Droplet on DigitalOcean. +# +# Prerequisites: +# export DIGITALOCEAN_TOKEN= +# +# Usage: +# wfctl infra plan --env staging +# wfctl infra apply --env staging + +infra: + auto_bootstrap: false + +modules: + - name: do-provider + type: iac.provider + config: + provider: digitalocean + token: ${DIGITALOCEAN_TOKEN} + + - name: my-droplet + type: infra.droplet + config: + provider: do-provider + environments: + staging: + config: + name: my-app + region: nyc1 + size: s-1vcpu-1gb + image: ubuntu-24-04-x64 + monitoring: true