Skill: ajmwagar/netlify (version 1.0.0)

--- name: netlify description: Use the Netlify CLI (netlify) to create/link Netlify sites and set up CI/CD (continuous deployment) from GitHub, especially for monorepos (multiple sites in one repo like Hugo sites under sites/<domain>). Use when Avery asks to deploy a new site, connect a repo to Netlify, configure build/publish settings, set environment variables, enable deploy previews, or automate Netlify site creation. --- # netlify Use the `netlify` CLI to create projects (“sites”), link local folders, and configure CI/CD from GitHub. ## Pre-reqs - `netlify --version` - Logged in (`netlify login`) **or** provide `--auth $NETLIFY_AUTH_TOKEN`. - Know the Netlify team/account slug you want to create sites under (optional but recommended). Helpful checks: ```bash netlify status netlify sites:list ``` ## Monorepo pattern (recommended) For **one repo with multiple sites** (e.g. `sites/seattlecustomboatparts.com`, `sites/floridacustomerboatparts.com`): - Create **one Netlify site per domain**. - Set the site’s **Base directory** to that subfolder. - Put a `netlify.toml` *inside that subfolder*. This keeps each domain’s build config self-contained. ### Hugo subfolder `netlify.toml` Create `sites/<domain>/netlify.toml`: ```toml [build] command = "hugo --minify" publish = "public" [build.environment] HUGO_VERSION = "0.155.1" ``` (Adjust HUGO_VERSION as needed.) ## Fast workflow: create + link + init CI/CD ### 1) Create a Netlify site (project) Run inside the site folder you want to deploy (base dir): ```bash cd sites/<domain> netlify sites:create --name <netlify-site-name> --account-slug <team> --with-ci ``` Notes: - `--with-ci` starts CI hooks setup. - If you need manual control, add `--manual`. ### 2) Link local folder to the created site If not linked already: ```bash netlify link ``` ### 3) Connect to GitHub for continuous deployment ```bash netlify init ``` This is usually interactive (select Git remote/repo + build settings). For automation we can pre-create `netlify.toml` and then accept defaults. ## Environment variables Set per-site vars: ```bash netlify env:set VAR_NAME value netlify env:list ``` Useful for monorepos: - `CONTACT_EMAIL` (or other shared config) ## Deploy Manual deploys (handy for quick preview): ```bash netlify deploy # draft deploy netlify deploy --prod # production deploy ``` ## Included scripts - `scripts/hugo_netlify_toml.sh`: create a `netlify.toml` in a Hugo subfolder - `scripts/netlify_monorepo_site.sh`: helper to create/link/init a site for a subfolder When using scripts, prefer passing `NETLIFY_AUTH_TOKEN` via env for non-interactive runs.

path: scripts/hugo_netlify_toml.sh
content: #!/usr/bin/env bash
set -euo pipefail

# Create a netlify.toml for a Hugo site whose base dir is the current folder.
# Usage:
#   ./hugo_netlify_toml.sh [HUGO_VERSION]

HUGO_VERSION="${1:-0.155.1}"

cat > netlify.toml <<EOF
[build]
  command = "hugo --minify"
  publish = "public"

[build.environment]
  HUGO_VERSION = "${HUGO_VERSION}"
EOF

echo "Wrote $(pwd)/netlify.toml (HUGO_VERSION=${HUGO_VERSION})"

path: scripts/netlify_monorepo_site.sh
content: #!/usr/bin/env bash
set -euo pipefail

# Helper for monorepos: create/link/init a Netlify site for a specific subfolder.
#
# Usage:
#   ./netlify_monorepo_site.sh <site_dir> <netlify_site_name> [account_slug]
#
# Examples:
#   ./netlify_monorepo_site.sh sites/seattlecustomboatparts.com seattlecustomboatparts FuturePresentLabs
#
# Notes:
# - Runs netlify sites:create in <site_dir>.
# - Writes a Hugo netlify.toml (hugo --minify, publish public) if none exists.
# - Starts `netlify init` (interactive) to connect GitHub.

SITE_DIR="$1"
SITE_NAME="$2"
ACCOUNT_SLUG="${3:-}"

if [[ ! -d "$SITE_DIR" ]]; then
  echo "site_dir not found: $SITE_DIR" >&2
  exit 1
fi

pushd "$SITE_DIR" >/dev/null

if [[ ! -f netlify.toml ]]; then
  # Default Hugo version; override by editing file later if needed.
  "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/hugo_netlify_toml.sh" "0.155.1"
fi

CREATE_ARGS=(sites:create --name "$SITE_NAME" --with-ci)
if [[ -n "$ACCOUNT_SLUG" ]]; then
  CREATE_ARGS+=(--account-slug "$ACCOUNT_SLUG")
fi

echo "+ netlify ${CREATE_ARGS[*]}"
netlify "${CREATE_ARGS[@]}"

echo "+ netlify link (if prompted)"
netlify link || true

echo "+ netlify init (interactive: connect GitHub + set build settings)"
netlify init

popd >/dev/null

echo "Done. Next: commit netlify.toml (if new) and push; Netlify will deploy from GitHub."

Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)