A working blueprint that shows how the GitHub platform delivers full CI/CD for an Oracle APEX application — from idea to production, with gates, traceability, and a recovery story.
A 15-minute customer demo that walks an APEX change from issue → branch → pull request → merge → release → production, with a recovery story when something breaks. The technical pipeline uses SQLcl + GitHub Actions to deploy schema changes and APEX application updates to Oracle Autonomous Database.
GitHub platform surfaces shown:
| Surface | What it does in this demo |
|---|---|
| Issues | Stakeholders open feature requests; engineers pick them up |
| Pull Requests | Code review, branch protection, status checks, deploy plan comment |
| Actions | validate.yml (PR static checks) + deploy.yml (DEV + PROD deploy) |
| Environments | development (auto-deploy) vs production (manual reviewer required) |
| Secrets | Encrypted, environment-scoped credentials for ADB wallet + DB user |
| Releases | Publishing a Release triggers production deployment |
.github/
workflows/
validate.yml # PR static checks + deploy plan comment
deploy.yml # main → DEV; release → PROD (gated)
ISSUE_TEMPLATE/ # feature_request, bug_report
pull_request_template.md
CODEOWNERS
apex/
f100.sql # APEX app export (placeholder; replace with real export)
README.md
db/
install.sql # master orchestrator
schema/
000_schema_migrations.sql
001_create_feedback.sql
migrations/
002_seed_data.sql
003_add_category.sql # THE DEMO MOMENT
README.md
scripts/
deploy.sql # SQLcl entry point
verify.sql # post-deploy smoke
docs/
RESEARCH.md # full technical research blueprint
SETUP.md # one-time setup (ADB, wallet, secrets, environments)
BUILD_APEX_APP.md # A→Z walkthrough for replacing synthetic f100.sql with a real app
DEMO_RUNBOOK.md # operational runbook for the "add category field" demo
DEMO_SCRIPT.md # 15-minute act-by-act speaker notes
If you're here to run the demo:
- Read
docs/SETUP.md— provision Oracle Autonomous DB Always Free, encode your wallet, configure GitHub Secrets per environment. - (Optional)
docs/BUILD_APEX_APP.md— build and export a real APEX app to replace the synthetic placeholder. docs/DEMO_RUNBOOK.md— step-by-step procedure for staging and executing the "add category field" demo end-to-end (copy-pasteable commands, browser tab order, on-stage narration cues, reset procedure).docs/DEMO_SCRIPT.md— higher-level 15-minute act-by-act narrative for adapting the demo to other changes.
If you're here to understand the pipeline:
- Start at
docs/RESEARCH.md— the full technical blueprint with citations. - Then read
.github/workflows/deploy.yml— the actual deploy pipeline (~150 lines).
- Stakeholder opens issue: "Add 'category' field to feedback form".
- Developer branches, adds
db/migrations/003_add_category.sqland the matching APEX page change, opens a PR. validate.ymlruns on the PR: lints workflows, checks SQL hygiene (WHENEVER SQLERROR EXIT), enforces migration ordering, blocks any committed secrets, and posts a deploy-plan PR comment.- Merge → DEV :
deploy.ymlrunsdeploy-dev, applies migrations, imports the APEX app, verifies. - Tag a Release (
v1.1.0) →deploy-prodwaits for a human reviewer on theproductionenvironment → approved → applied to PROD. - Rollback : a bad commit gets caught by the pipeline;
git revertPR restores green.
Schema migrations are plain SQLcl. To smoke-test locally without GitHub:
# 1. Install SQLcl (https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/)
# 2. Place your wallet zip at ./wallet/ (unzipped), chmod 600 ./wallet/*
# 3. export TNS_ADMIN=$PWD/wallet
# 4. sql USER/PASS@yourdb_high
SQL> @scripts/deploy.sql
SQL> @scripts/verify.sql
SQL> apex import -applicationid 100 -workspacename DEMO -file apex/f100.sqlThe following are intentionally out of scope to keep the demo at 15 minutes. See docs/RESEARCH.md for production-grade upgrade paths.
- Liquibase migrations
- Codespaces / devcontainer
- Multi-workspace / per-PR ADB clones
- utPLSQL / Cypress tests
- Static security scanning (APEX-SERT)
- Self-hosted runners
This is a demo repository. No production support. Adapt freely.