Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
fe9ea39
Add docopslab-dev gem with config pack distribution system
briandominick Dec 21, 2025
f55e24a
Add docopslab-dev distributable config packs
briandominick Dec 21, 2025
458ec90
Add docopslab-dev gem scripts, specs, and Docker support
briandominick Dec 21, 2025
ef9058d
Update Jekyll site infrastructure and build system
briandominick Dec 22, 2025
8c07b52
Add website styles and front-end assets
briandominick Dec 22, 2025
ce93759
Add projects data and reporting system
briandominick Dec 22, 2025
bff138c
Add general documentation and reference materials
briandominick Dec 22, 2025
182d56f
Add agent documentation library
briandominick Dec 22, 2025
af1f522
Add blog content and metablog posts
briandominick Dec 22, 2025
cb98b08
Add scripts and utilities
briandominick Dec 22, 2025
10cbcd1
Add root configuration files and static pages
briandominick Dec 22, 2025
dd8957c
style: apply Ruby code style improvements
briandominick Dec 22, 2025
83330db
docs: minor edits for clarity and style
briandominick Dec 22, 2025
ffe1dbf
docs: Quick fix to blog entry
briandominick Dec 22, 2025
6de23cc
ci: add main CI/CD workflow with PR previews and correct task names
briandominick Dec 23, 2025
8966cbb
build: copy jekyll-asciidoc-ui config to tracked _data/ directory
briandominick Dec 23, 2025
7c143d9
fix: clean up artifact path issues and update include paths for CI
briandominick Dec 23, 2025
f1b5948
ci: generate agent docs during build and update PR review instructions
briandominick Dec 23, 2025
4d69901
ci: fix agent docs generation and remove PR Pages deployment
briandominick Dec 23, 2025
63a86b8
feat: add review:serve task using gh CLI for easy PR preview
briandominick Dec 23, 2025
3b41d82
ci: deploy to gh-pages branch and publish agent docs to separate branch
briandominick Dec 23, 2025
cd9b22d
fix: Minor README edits
briandominick Dec 23, 2025
da9e703
fix: simplify agent docs extraction by regenerating from source
briandominick Dec 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .config/actionlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# actionlint configuration for this project
# References DocOps Lab base configuration

# Note: Shellcheck integration is disabled via -shellcheck= flag in rake task
# Use dedicated shellcheck linter instead

# Project-specific ignores (add as needed):
# paths:
# .github/workflows/**/*.{yml,yaml}:
# ignore:
# - 'pattern to ignore'
73 changes: 73 additions & 0 deletions .config/docopslab-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
source:
repo: DocOps/lab
ref: v1
root: gems/docopslab-dev/assets/config-packs
docs:
- source: docs/agent/AGENTS.md
target: AGENTS.md
synced: false
- source: docs/agent/skills/*.md
target: .agent/docs/skills
synced: true
- source: docs/agent/topics/*.md
target: .agent/docs/topics
synced: true
- source: docs/agent/roles/*.md
target: .agent/docs/roles
synced: true
- source: docs/agent/missions/*.md
target: .agent/docs/missions
synced: true
tools:
- tool: rubocop
files:
- source: rubocop/base.yml
target: .config/.vendor/docopslab/rubocop.yml
synced: true
- source: rubocop/project.yml
target: .config/rubocop.yml
synced: false

- tool: vale
files:
- source: vale/base.ini
target: .config/.vendor/docopslab/vale.ini
synced: true
- source: vale/project.ini
target: .config/vale.local.ini
synced: false
paths:
lint: ['.']
skip:
- _metablog/_asciidoc-snippets.adoc
- _metablog/_asciidoc-crazy-table-snippet.adoc
- _docs/partials/built/*
- _projects/*
exts: ['adoc']
# git_tracked_only: false

- tool: htmlproofer
files:
- source: htmlproofer/base.yml
target: .config/.vendor/docopslab/htmlproofer.yml
synced: true
- source: htmlproofer/project.yml
target: .config/htmlproofer.local.yml
synced: false
paths:
lint: _site

- tool: shellcheck
files:
- source: shellcheck/base.shellcheckrc
target: .config/shellcheckrc
synced: true

- tool: actionlint
files:
- source: actionlint/base.yml
target: .config/.vendor/docopslab/actionlint.yml
synced: true
- source: actionlint/project.yml
target: .config/actionlint.yml
synced: false
18 changes: 18 additions & 0 deletions .config/htmlproofer.local.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# DocOps Lab - Project-specific HTMLProofer Configuration
# This file contains project-specific overrides for HTMLProofer settings.
# It will be merged with the base organizational config at runtime.

# Project-specific URL ignores (will be merged with base ignores)
# ignore_urls:
# - /project-specific-url/

# Project-specific file ignores (will be merged with base ignores)
# ignore_files:
# - project-specific-dir/

# Override any base settings here:
# check_external_hash: true
# disable_external: true

# Add any project-specific settings below:
check_directory: _site
24 changes: 24 additions & 0 deletions .config/rubocop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# DocOps Lab RuboCop Configuration

inherit_from: .vendor/docopslab/rubocop.yml

# Increase metrics limits for this codebase
Metrics/ClassLength:
Max: 300
Exclude:
- 'gems/docopslab-dev/lib/docopslab/dev/linters.rb' # Linters module is large by nature
- 'gems/docopslab-dev/lib/docopslab/dev/tasks.rb' # Just lots of tasks

Metrics/ModuleLength:
Max: 350

Metrics/MethodLength:
Max: 100
Exclude:
- 'gems/docopslab-dev/lib/docopslab/dev/tasks.rb' # Task definitions are naturally long

Metrics/BlockLength:
Max: 100

Metrics/ParameterLists:
Max: 6
14 changes: 14 additions & 0 deletions .config/shellcheckrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# ShellCheck configuration for DocOps Lab projects
# This file is synced from docopslab-dev gem

# Disable some overly strict rules for our use cases
disable=SC2034 # Variable appears unused (common in sourced scripts)
disable=SC2086 # Double quote to prevent globbing (sometimes we want globbing)
disable=SC2181 # Check exit code directly with e.g. 'if mycmd;', not indirectly with $?

# Set default shell to bash (most of our scripts are bash)
shell=bash

# Enable additional optional checks
enable=quote-safe-variables
enable=require-variable-braces
27 changes: 27 additions & 0 deletions .config/vale.local.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# DocOps Lab Vale Configuration
# Combined base and project configuration for consistent Vale linting

MinAlertLevel = warning
StylesPath = .vendor/vale/styles

[asciidoctor]
missing-attribute = drop
safe = unsafe
experimental = YES

[_metablog/*.adoc]
DocOpsLab-AsciiDoc.ExplicitSectionIDs = NO

[_blog/*.adoc]
DocOpsLab-AsciiDoc.ExplicitSectionIDs = NO

[_docs/agent/**/*.adoc]
DocOpsLab-AsciiDoc.ExplicitSectionIDs = NO
DocOpsLab-AsciiDoc.ExtraLineBeforeLevel1 = NO

[_docs/agent/skills/asciidoc.adoc]
DocOpsLab-AsciiDoc.ProperDLs = NO
DocOpsLab-AsciiDoc.OneSentencePerLine = NO

[_docs/templates/AGENTS.markdown]
BasedOnStyles = DocOpsLab-Authoring
196 changes: 196 additions & 0 deletions .github/workflows/build-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
name: Build and Deploy Documentation

on:
workflow_call:
inputs:
ruby_version:
description: "Ruby version for building docs"
type: string
default: "3.2"
enable_cache:
description: "Enable bundler and other caching"
type: boolean
default: true
publish_pages:
description: "Publish to GitHub Pages"
type: boolean
default: true
build_command:
description: "Custom build command (default: auto-detect)"
type: string
required: false
source_dir:
description: "Source directory for docs"
type: string
default: "."
output_dir:
description: "Output directory (relative to source_dir)"
type: string
default: "_site"
secrets:
GITHUB_TOKEN:
description: "GitHub token for Pages deployment"
required: false

# Set permissions for GitHub Pages deployment
permissions:
contents: read
pages: write
id-token: write

# Allow only one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ inputs.ruby_version }}
bundler-cache: ${{ inputs.enable_cache }}

- name: Setup Pages
id: pages
if: inputs.publish_pages
uses: actions/configure-pages@v4

- name: Sync DocOps Lab configs
run: |
if bundle exec rake -T | grep -q "labdev:sync:configs"; then
bundle exec rake labdev:sync:configs
fi

- name: Auto-detect and build documentation
run: | # this block seems overwrought; let's review and trim
if [ -n "${{ inputs.build_command }}" ]; then
echo "Using custom build command: ${{ inputs.build_command }}"
cd ${{ inputs.source_dir }}
${{ inputs.build_command }}
elif [ -f "_config.yml" ]; then
echo "Jekyll site detected - building with Jekyll"
cd ${{ inputs.source_dir }}
bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path || '' }}"
elif [ -f "config.ru" ]; then
echo "Rack application detected"
cd ${{ inputs.source_dir }}
# For Rack apps, we might need a custom build process
if bundle exec rake -T | grep -q "build\|assets"; then
bundle exec rake build || bundle exec rake assets:precompile || echo "No build task found"
fi
elif [ -f "Rakefile" ] && bundle exec rake -T | grep -q "docs\|build"; then
echo "Rakefile with docs task detected"
cd ${{ inputs.source_dir }}
if bundle exec rake -T | grep -q "docs"; then
bundle exec rake docs
elif bundle exec rake -T | grep -q "build"; then
bundle exec rake build
fi
elif find . -name "*.adoc" -o -name "*.md" | head -1 | grep -q .; then
echo "AsciiDoc/Markdown files detected - building with AsciiDoctor"
cd ${{ inputs.source_dir }}
# Create a simple build for AsciiDoc files
mkdir -p ${{ inputs.output_dir }}
if command -v asciidoctor &> /dev/null; then
find . -name "*.adoc" -exec asciidoctor {} -D ${{ inputs.output_dir }} \;
fi
if command -v pandoc &> /dev/null; then
find . -name "*.md" -exec pandoc {} -o ${{ inputs.output_dir }}/{}.html \;
fi
else
echo "No recognized documentation format - creating minimal index"
cd ${{ inputs.source_dir }}
mkdir -p ${{ inputs.output_dir }}
echo "<html><body><h1>Documentation</h1><p>Built from $(pwd)</p></body></html>" > ${{ inputs.output_dir }}/index.html
fi

- name: Validate build output
run: |
cd ${{ inputs.source_dir }}
if [ ! -d "${{ inputs.output_dir }}" ]; then
echo "❌ Output directory ${{ inputs.output_dir }} not found!"
exit 1
fi

if [ ! -f "${{ inputs.output_dir }}/index.html" ]; then
echo "⚠️ No index.html found in ${{ inputs.output_dir }}"
# Try to find any HTML file to use as index
html_file=$(find ${{ inputs.output_dir }} -name "*.html" | head -1)
if [ -n "$html_file" ]; then
echo "Using $html_file as index.html"
cp "$html_file" "${{ inputs.output_dir }}/index.html"
else
echo "Creating minimal index.html"
echo "<html><body><h1>Documentation</h1></body></html>" > ${{ inputs.output_dir }}/index.html
fi
fi

echo "✅ Build output validated"
echo "Files in ${{ inputs.output_dir }}:"
ls -la ${{ inputs.output_dir }}

- name: Upload Pages artifact
if: inputs.publish_pages
uses: actions/upload-pages-artifact@v3
with:
path: ${{ inputs.source_dir }}/${{ inputs.output_dir }}

- name: Upload build artifact
if: ${{ !inputs.publish_pages }}
uses: actions/upload-artifact@v4
with:
name: documentation
path: ${{ inputs.source_dir }}/${{ inputs.output_dir }}

deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
if: inputs.publish_pages
timeout-minutes: 10
outputs:
page_url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

summary:
runs-on: ubuntu-latest
needs: [build, deploy]
if: always()
timeout-minutes: 2
steps:
- name: Documentation Build Summary
run: |
echo "## Documentation Build Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

# Build Results
if [ "${{ needs.build.result }}" = "success" ]; then
echo "✅ **Build**: Documentation built successfully" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Build**: Documentation build failed" >> $GITHUB_STEP_SUMMARY
fi

# Deploy Results
if [ "${{ inputs.publish_pages }}" = "false" ]; then
echo "⏭️ **Deploy**: GitHub Pages deployment disabled" >> $GITHUB_STEP_SUMMARY
echo "📦 **Artifact**: Documentation available as build artifact" >> $GITHUB_STEP_SUMMARY
elif [ "${{ needs.deploy.result }}" = "success" ]; then
echo "✅ **Deploy**: Successfully deployed to GitHub Pages" >> $GITHUB_STEP_SUMMARY
if [ -n "${{ needs.deploy.outputs.page_url }}" ]; then
echo "🌐 **URL**: ${{ needs.deploy.outputs.page_url }}" >> $GITHUB_STEP_SUMMARY
fi
else
echo "❌ **Deploy**: Failed to deploy to GitHub Pages" >> $GITHUB_STEP_SUMMARY
fi
Loading