Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
662 commits
Select commit Hold shift + click to select a range
5a8c441
🔧 Configured to extract user and system includes
mkarlesky Feb 20, 2026
0d97223
✨ Robust user vs. system include differentiation
mkarlesky Feb 20, 2026
90ba8b9
♻️ Better includes logging
mkarlesky Feb 20, 2026
bf78352
🚸 Tweak logging
mkarlesky Feb 20, 2026
882ce42
✨ MockInclude first degree support
mkarlesky Feb 20, 2026
ef4d66c
🐛 Fixed missing MockInclude handling
mkarlesky Feb 20, 2026
191fbb8
✨ Partials project configuration logging
mkarlesky Feb 21, 2026
5715db9
♻️ DRY Includes manufacturing
mkarlesky Feb 21, 2026
c550ea5
🚚 Rename / reorganize preprocessing in directory
mkarlesky Feb 21, 2026
706cf0f
🐛 Fixed flip-flopped logging references
mkarlesky Feb 22, 2026
0b0170c
🐛 Extract Partials as includes
mkarlesky Feb 22, 2026
be53119
🥅 Exception handling for internal inconsistencies
mkarlesky Feb 22, 2026
ea68c31
🚸 Better logging
mkarlesky Feb 22, 2026
6df5dbd
🐛 🚸 Test file preprocessing
mkarlesky Feb 22, 2026
60d03a6
🔥 Removed forgotten leftover from reorganization
mkarlesky Feb 23, 2026
9f5e235
🥅 Better handling of fallback conditions
mkarlesky Feb 23, 2026
70831eb
🚸 Tweaked tool logging
mkarlesky Feb 24, 2026
6739fe3
🚚 Includes handling organization
mkarlesky Feb 24, 2026
4ff9f93
✏️ Fixed typo
mkarlesky Mar 5, 2026
c9914aa
✏️ Fixed logging typo
mkarlesky Mar 5, 2026
6ee79f4
🐛 Remove mocking build path
mkarlesky Mar 5, 2026
1c922d1
⚡️ 100% certain 0 depth user & system #includes
mkarlesky Mar 5, 2026
1b9ead1
⚡️ Added sensible max depth
mkarlesky Mar 5, 2026
6e64166
♻️ Fallback handling responsibilities
mkarlesky Mar 5, 2026
7d6b826
✅ Fix require path
mkarlesky Mar 6, 2026
9e45002
✅ Fix require and dependency injection
mkarlesky Mar 6, 2026
41d4c21
✅ Fixed logging expectations
mkarlesky Mar 6, 2026
0a408a8
✅ Test coverage & API update
mkarlesky Mar 6, 2026
a48e078
✅ Fix parameter name
mkarlesky Mar 6, 2026
713e523
✅ Fixes for use of Include objects
mkarlesky Mar 7, 2026
4be4e15
🐛 Equality operator
mkarlesky Mar 7, 2026
3910cb4
🐛 Variable reference
mkarlesky Mar 7, 2026
78b7170
✅ Updated to use Include objects
mkarlesky Mar 7, 2026
1c55ad0
🐛 Swapped class name references
mkarlesky Mar 7, 2026
af0321b
✅ Test coverage
mkarlesky Mar 7, 2026
05b8ef1
🚚 Subdirectory + split Includes & Include tests
mkarlesky Mar 8, 2026
f7561df
🐛 Source extras + test file path handling
mkarlesky Mar 8, 2026
695315a
🐛 Use test filepath for context extraction
mkarlesky Mar 8, 2026
140b498
✅ Test coverage for reconcile()
mkarlesky Mar 8, 2026
0bd1dca
🚨 Fix already defined warnings
mkarlesky Mar 9, 2026
1c32595
🐛 Argument splat handling
mkarlesky Mar 9, 2026
8d4c55d
🐛 Mock header to source filename comparison
mkarlesky Mar 9, 2026
82c78ad
✅ Remove array ordering assumptions
mkarlesky Mar 9, 2026
fd9be78
🚸 Added test context and automatic descriptions
mkarlesky Mar 9, 2026
4bc335a
🐛 Removed duplicated description block
mkarlesky Mar 9, 2026
c0c0659
🚸 More and better named testing Rake tasks
mkarlesky Mar 9, 2026
40b232b
✅ Fix variable names and test logic
mkarlesky Mar 9, 2026
de97aa0
🎨 Renaming, comments & depth limits
mkarlesky Mar 9, 2026
f6d7706
📝 Preprocessing documentation
mkarlesky Mar 9, 2026
c1b8503
🚸 Cleaned up test build / preprocessing logging
mkarlesky Mar 9, 2026
6618e6b
✨ Added line handling with line number
mkarlesky Mar 10, 2026
a8dd4b1
✨ Added filepath and line number fields
mkarlesky Mar 10, 2026
aa9a52d
✨ Find code in preprocessor output at line number
mkarlesky Mar 10, 2026
64e14d4
⚡️ More memory efficient file assembly
mkarlesky Mar 10, 2026
39ea92e
✨ Partials coverage source line remapping
mkarlesky Mar 10, 2026
97ae8c6
♻️ Moved C function cleanup to Partial generation
mkarlesky Mar 11, 2026
285bbe1
♻️ Deduplicated code
mkarlesky Mar 11, 2026
16d48cc
✨ Added support for Partials coverage compilation
mkarlesky Mar 11, 2026
eb4fd58
✨ Coverage reporting remapping
mkarlesky Mar 11, 2026
5d8c290
✅ Temporarily disable tests
mkarlesky Mar 11, 2026
7bda1a4
✨ Partials coverage reporting support
mkarlesky Mar 11, 2026
4a0c2fb
♻️ Smarter partials sources handling
mkarlesky Mar 11, 2026
2cb1542
📝 Preprocessing explanation revisions
mkarlesky Mar 11, 2026
c6feb4a
✅ Fix report paths
mkarlesky Mar 11, 2026
a7688b4
🐛 Remove unreliable / breaking coverage check
mkarlesky Mar 11, 2026
43ae732
🚚 Reorganize generators
mkarlesky Mar 11, 2026
9f6ffb0
✅ Fix test with Struct interface change
mkarlesky Mar 11, 2026
6bbdca6
✅ Fix test constructor + more test coverage
mkarlesky Mar 11, 2026
dc4993b
✅ Exapnded function formatting test
mkarlesky Mar 11, 2026
8a1576d
✅ Updates for new functionality
mkarlesky Mar 11, 2026
9605abb
✅ Updated function definition extraction interface
mkarlesky Mar 11, 2026
45f6081
🎨 Renaming, comments, and constants
mkarlesky Mar 12, 2026
db5716e
🎨 Better constructor formatting
mkarlesky Mar 12, 2026
579d962
✨ C comment scanning and removal
mkarlesky Mar 12, 2026
4f88c15
🚸 Emojified exception messages
mkarlesky Mar 12, 2026
03b2483
🚸 Emojified exception messages
mkarlesky Mar 12, 2026
c78eebc
✨ Fallback simple C source search
mkarlesky Mar 12, 2026
01da2fe
🚸 Emojified exception messages
mkarlesky Mar 12, 2026
813c102
🚸 Emojified exception messages
mkarlesky Mar 12, 2026
8379bf7
🚸 Reformat debug logging
mkarlesky Mar 12, 2026
65f3363
✨ Compact or line-preserving `remove()`
mkarlesky Mar 12, 2026
0d1999e
✨ Space insensitive match plus plain C fallback
mkarlesky Mar 12, 2026
89d8b1e
✨ Pure Ruby C comment stripping
mkarlesky Mar 12, 2026
82d0a18
✨ Fallback function code block finding
mkarlesky Mar 12, 2026
057b875
✨ Fallback C function line number finding
mkarlesky Mar 12, 2026
8f4af1c
✨ Partials from directives-only preprocessing
mkarlesky Mar 12, 2026
3baf1ab
♻️ Moved cleanup to generation
mkarlesky Mar 14, 2026
7daec14
✨ Extract partial source from directives-only file
mkarlesky Mar 14, 2026
3213ad7
✨ First function-scoped static variable handling
mkarlesky Mar 14, 2026
79ad7ac
♻️ Variable declaration encapsulation
mkarlesky Mar 16, 2026
5dd207c
♻️ Changed no-op replacement interface
mkarlesky Mar 17, 2026
368d22a
✅ Test coverage
mkarlesky Mar 17, 2026
59fbcd5
⚡️ No unnecessary preprocessing in header files
mkarlesky Mar 17, 2026
30d3cae
🚸 Revert :treat_inlines when Partials enabled
mkarlesky Mar 17, 2026
339f788
Merge branch 'feature/partials' of https://github.com/ThrowTheSwitch/…
mkarlesky Mar 17, 2026
df75298
✨ Stage 1: Add full Partials config handling
mkarlesky Mar 21, 2026
39506f5
✨ Incomplete rigging for Partials config handling
mkarlesky Mar 25, 2026
b262b9a
Merge branch 'master' into feature/partials
mkarlesky Mar 25, 2026
c79e530
⬆️ Update Unity (with test failure report fix)
mkarlesky Mar 25, 2026
090c662
✨ Partials configuration validation
mkarlesky Mar 25, 2026
5981f92
✨ First working Partials configuration
mkarlesky Mar 26, 2026
a4acd06
⬆️ Update Unity for real this time
mkarlesky Mar 26, 2026
b9e8387
✨ Validate partials in use and complain
mkarlesky Mar 26, 2026
9767daa
🎨 Whitespace
mkarlesky Mar 26, 2026
85fec1f
✅ Test updates to match source
mkarlesky Mar 27, 2026
464bcf2
🚚 partials.h is now ceedling.h
mkarlesky Mar 27, 2026
0588ce1
♻️ Improved Partials configuration handling
mkarlesky Mar 28, 2026
f26f45c
🐛 Added empty array protection
mkarlesky Apr 8, 2026
37ce062
🐛 Added nil protections
mkarlesky Apr 8, 2026
9691632
♻️ Better logging messages & fuller validation
mkarlesky Apr 8, 2026
0b3be3d
🐛 Proper present? logic
mkarlesky Apr 8, 2026
ee6f106
✨ Preprocessor directives extraction
mkarlesky Apr 12, 2026
891c63e
✨ Added typedef extraction
mkarlesky Apr 13, 2026
553d082
🚚 Rename variable variables
mkarlesky Apr 13, 2026
2401b38
✅ Fix missed renaming
mkarlesky Apr 13, 2026
2d06b32
🚚 Update argument names in test cases
mkarlesky Apr 13, 2026
8bc8de4
✨ Handle _Static_assert & variants C keyword
mkarlesky Apr 13, 2026
2731b80
✨ C extraction of structs, unions, and enums
mkarlesky Apr 14, 2026
405dbf0
✨ Line numbers in C extraction
mkarlesky Apr 15, 2026
c61cac7
🚚 Clearer argument names before refactoring
mkarlesky Apr 16, 2026
533885b
✨ typedef, macro, struct, union, enum in Partials
mkarlesky Apr 17, 2026
6ff78c7
✨ PARTIAL_TEST_ALL_MODULE, PARTIAL_MOCK_ALL_MODULE
mkarlesky Apr 17, 2026
b030671
🐛 C extraction trailing newline handling fixes
mkarlesky Apr 17, 2026
f26a4cc
♻️ More useful logging
mkarlesky Apr 19, 2026
060e7fb
✨ Added logging for function scope static vars
mkarlesky Apr 19, 2026
4f52f5e
✨ PARTIAL_TEST_ALL_MODULE, PARTIAL_MOCK_ALL_MODULE
mkarlesky Apr 19, 2026
53c0aca
🎨 Logging pattern consistency
mkarlesky Apr 19, 2026
07a942a
✅ Fix tests after newline handling change
mkarlesky Apr 19, 2026
32d55eb
📝 First draft of Partials docs
mkarlesky Apr 22, 2026
7a49107
📝 More Partials documentation revisions
mkarlesky Apr 24, 2026
57dac59
📝 Partials documentation revisions
mkarlesky Apr 24, 2026
1225c40
📝 Partials documentation revisions
mkarlesky Apr 25, 2026
964e4a9
📝 Partials documentation revisions
mkarlesky Apr 25, 2026
81a2d95
📝 More Partials documentation revisions
mkarlesky Apr 25, 2026
6451f8f
📝 First minimally working documentation bundle
mkarlesky Apr 26, 2026
d3b72d3
📝 Refining docs site content & config
mkarlesky Apr 26, 2026
f75b79d
📝 Refactored testing guide
mkarlesky Apr 26, 2026
1f0f201
🚚 Move mkdocs source documentation
mkarlesky Apr 26, 2026
1b86c47
📝 More documentation bundle revisions
mkarlesky Apr 27, 2026
e46fb86
📝 Fixed repo site links
mkarlesky Apr 27, 2026
9e6e715
📝 More docs tweaks and organization
mkarlesky Apr 28, 2026
d5e755e
📝 More better mkdocs site
mkarlesky Apr 28, 2026
2c2801a
🔥 Plugin documentation now part of mkdocs site
mkarlesky Apr 28, 2026
0bf3e55
::doc Refactored development section
mkarlesky Apr 29, 2026
a85af23
📝 Fixes & improvements
mkarlesky Apr 29, 2026
abf261f
📝 Tweaks and comments
mkarlesky Apr 29, 2026
bb2402f
📝 Added Dr. Surly’s courses
mkarlesky Apr 29, 2026
d66df5d
✨ Added recursive directory copying
mkarlesky Apr 29, 2026
9a37d2c
🔨 Rake tasks for documentation work
mkarlesky Apr 29, 2026
d6a8eb2
📝 Updated FFF docs to point to example project
mkarlesky Apr 29, 2026
36de283
📝 Partials documentation polish
mkarlesky Apr 30, 2026
0391d2b
📝 Added feature admonition
mkarlesky Apr 30, 2026
e2a239e
📝 Added Partials feature announcement
mkarlesky Apr 30, 2026
33af61a
📝 Refactored lengthy Partials into subsection
mkarlesky Apr 30, 2026
ef6db74
🔖 Bumped version tag down to 1.1.0
mkarlesky Apr 30, 2026
f20a948
📝 Reverted to older admonition styling
mkarlesky Apr 30, 2026
381ed92
📝 Partials polish
mkarlesky May 1, 2026
831e5d4
📝 Fix for single card spanning two columns
mkarlesky May 1, 2026
06a25ac
🚚 Reorganize resources; add favicon
mkarlesky May 1, 2026
19b94f8
📝 Refactoring overview content
mkarlesky May 1, 2026
6e50552
📝 More tweaks for layout and clarity
mkarlesky May 1, 2026
9355177
📝 Tweaks
mkarlesky May 1, 2026
f43d577
📝 Apostrophe fixes
mkarlesky May 1, 2026
a69c619
📝 Formatting & title fixes
mkarlesky May 1, 2026
469bfd1
📝 More better new feature badge
mkarlesky May 2, 2026
dbd4629
📝 Tighter prose + warning admonition
mkarlesky May 2, 2026
f6c0b15
📝 Configuration reference polish and fixes
mkarlesky May 2, 2026
7ad9a43
✨ Preservation of C statement ordering in Partials
mkarlesky May 2, 2026
5c090f5
📝 Added whitespace at end of all mkdocs docs
mkarlesky May 2, 2026
4c54f84
📝 Fixed admonition markdown block indents
mkarlesky May 3, 2026
5225acc
✨ Handling for compiler extensions
mkarlesky May 4, 2026
d9fa7f3
📝 Finished first pass cleanup on all content
mkarlesky May 5, 2026
ba491a4
✅ Test behavior clarifications
mkarlesky May 5, 2026
d0fd3dd
📝 Fully removed `subprojects` references
mkarlesky May 5, 2026
4dfb827
🔧 Removed all subprojects references
mkarlesky May 5, 2026
c5d58d5
📝 Improve partials warning
mkarlesky May 6, 2026
a43ece4
♻️ Decomposed `setup_and_invoke()` into pipeline
mkarlesky May 6, 2026
eb67452
Merge pull request #1142 from ThrowTheSwitch/refactor/test_invoker
mkarlesky May 7, 2026
598d7e5
Apply additional styling to documentation to closer match ThrowTheSwi…
mvandervoord May 7, 2026
60cdb39
💄 Fixed styling configuration
mkarlesky May 7, 2026
2cfa1c9
📝 First reference section reorg
mkarlesky May 7, 2026
e3e60ae
Remove search instead of under-specifying search when local.
mvandervoord May 7, 2026
7ee24c7
✨ `ceedling check`
mkarlesky May 9, 2026
4a0341f
🐛 Fixed mockable Partial include remapping
mkarlesky May 12, 2026
ceec04d
🐛 Universal coverage support
mkarlesky May 13, 2026
a72650a
✨ Gcov Partials reporting + MC/DC
mkarlesky May 13, 2026
db9b001
♻️ Refactored test_invoker
mkarlesky May 13, 2026
c9f2c74
♻️ Broke out console reports to a new reportinator
mkarlesky May 14, 2026
d1dcd15
💄 Subsection separators in left side navigation
mkarlesky May 14, 2026
797147f
✨ Filter superfluous Ceedling generated symbols
mkarlesky May 14, 2026
ff31113
✨ Added regex operators to Includes class
mkarlesky May 15, 2026
d25ba32
🐛 Preventing logging for CLI commands
mkarlesky May 16, 2026
046031b
🐛 Call `console`
mkarlesky May 16, 2026
e381eb7
🚸 More CLI logging fixes
mkarlesky May 16, 2026
df752a2
🐛 Removed unused NAME argument
mkarlesky May 16, 2026
9584018
🚸 More CLI polish
mkarlesky May 16, 2026
a019144
📝 Update reference and gcov
mkarlesky May 17, 2026
e4336fb
🐛 Fix renaming
mkarlesky May 17, 2026
6320461
✅ Update test cases to new docs structure
mkarlesky May 17, 2026
bc57e90
✅ Fix docs/ directory listing test
mkarlesky May 17, 2026
668d752
👷 Add docs generation to Github Action workflow
mkarlesky May 17, 2026
2730d80
💚 Add needed dependencies
mkarlesky May 17, 2026
96316b8
💚 Dynamically reactive Python virtual environment
mkarlesky May 17, 2026
a3e8417
💚 Add missing mike dependency
mkarlesky May 17, 2026
eb9819e
💚 Add --trace for debugging
mkarlesky May 17, 2026
71adc8f
💚 Shell exit value fix
mkarlesky May 17, 2026
3fada90
💚 Docs dependency order for testing
mkarlesky May 17, 2026
b8c620f
👷 Simple renaming for clarity
mkarlesky May 18, 2026
a825190
🐛 Redefinition protection
mkarlesky May 18, 2026
caee951
🚸 Better docs creation logging
mkarlesky May 18, 2026
83ee388
📝 Revisions to gcov compatibility
mkarlesky May 18, 2026
20695db
📝 Refactored Partials docs for clarity
mkarlesky May 18, 2026
3efe4f4
🐛 Removed newline cleaning that breaks coverage
mkarlesky May 18, 2026
5a2bc5a
📝 Refactored GCov documentation
mkarlesky May 19, 2026
07fb9fe
👷 Reverted verbosity
mkarlesky May 19, 2026
df8a322
🐛 More newline handling fixes for coverage
mkarlesky May 19, 2026
bdb2020
✨ New system test & first system test refactoring
mkarlesky May 20, 2026
2c81876
🐛 Added string coercion for Rake#FileList handling
mkarlesky May 21, 2026
0f4250a
👷 Revamp of RSpec system testing
mkarlesky May 21, 2026
39678af
🚚 Reorganize specs
mkarlesky May 21, 2026
21651e3
👷 New system test handling
mkarlesky May 21, 2026
0269795
✅ Updated Gcov system tests to use `test_case`
mkarlesky May 21, 2026
9667a11
✅ Fixed forgotten intentionall broken test
mkarlesky May 21, 2026
f578293
👷 Tweak system test reporting
mkarlesky May 21, 2026
c3c985a
Merge pull request #1146 from ThrowTheSwitch/feature/better-system-te…
mkarlesky May 21, 2026
7343c1c
✨ `ceedling docs`
mkarlesky May 21, 2026
950e6a4
📝 Cleaned up reference landing page
mkarlesky May 22, 2026
2ecf14d
🐛 Added missing handling for array suffixes
mkarlesky May 23, 2026
d299aa5
✨ Added wondrous_forest example project
mkarlesky May 23, 2026
89455a7
📝 Formatting cleanup and phrasing improvements
mkarlesky May 23, 2026
8820b9d
📝 Admonitions leading to example projects
mkarlesky May 23, 2026
70b0dd3
✨ Project name in configuration
mkarlesky May 23, 2026
e6dd167
📝 Tweaked wording & formatting
mkarlesky May 23, 2026
fb2c8ad
🚚 config/ subidrectory reorganization
mkarlesky May 23, 2026
46df57f
✨ Partials handle macros in function signatures
mkarlesky May 23, 2026
26de8dc
📝 New :project ↳ :name
mkarlesky May 23, 2026
17df9e3
👷 New workflow construction
mkarlesky May 25, 2026
5006538
💚 Added Rake trace for build debugging
mkarlesky May 25, 2026
6ce610c
💚 Restored missing gem build steps
mkarlesky May 25, 2026
3252843
💚 Fix logic gaps
mkarlesky May 25, 2026
01a09e9
👷 Changelog.md integration in release workflow
mkarlesky May 25, 2026
a7ee19b
📝 Changelog placeholders for release test
mkarlesky May 25, 2026
e4c8fec
📝 Formatting tweaks
mkarlesky May 25, 2026
ee7c201
👷 Fixed release publication
mkarlesky May 25, 2026
14bdaca
👷 Fix for Changelog extraction
mkarlesky May 25, 2026
119565b
💚 Set up Changelog entry for testing
mkarlesky May 25, 2026
aa87349
👷 Changelog extraction improvements
mkarlesky May 25, 2026
731a5e9
👷 Extract Github Action step as script
mkarlesky May 25, 2026
fde8f8e
📝 First draft of 1.1.0 Changelog
mkarlesky May 25, 2026
913038e
Merge pull request #1151 from ThrowTheSwitch/test/workflow-redesign
mkarlesky May 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .github/workflows/_generate-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# =========================================================================
# Ceedling - Test-Centered Build System for C
# ThrowTheSwitch.org
# Copyright (c) 2010-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
# SPDX-License-Identifier: MIT
# =========================================================================

# -----------------------------------------------------------------------
# Internal reusable workflow — not intended to be triggered directly.
# Called by ci.yml, prerelease.yml, and release.yml.
#
# Purpose:
# Build the local HTML documentation bundle (MkDocs) for inclusion in
# the Ceedling gem and upload it as the artifact 'gem-docs-site-local'.
# Subsequent jobs in the calling workflow download this artifact to
# make the docs bundle available for testing and gem packaging.
# -----------------------------------------------------------------------

---
name: "Generate Local Docs Bundle"

on:
workflow_call:

permissions:
contents: read

jobs:
generate-docs:
name: "Generate Local Docs Bundle for Gem Inclusion"
runs-on: ubuntu-latest

steps:
# Use a cache for our tools to speed up builds
# No matrix here; Ruby version is hardcoded to match the cache key format used by test jobs
- uses: actions/cache@v4
with:
path: vendor/bundle
key: bundle-use-ruby-${{ runner.os }}-3.3-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
bundle-use-ruby-${{ runner.os }}-3.3-

- name: Checkout Latest Repo
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set Up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

# This is overkill, but it's the sanest way to ensure all Rakefile dependencies are available when we run docs:build:local task
- name: Install Gem Dependencies
run: |
bundle install

# --break-system-packages is required on Ubuntu 24.04+ (PEP 668 prevents pip from
# installing to the system Python environment without explicit opt-in)
- name: Install MkDocs and mkdocs-material
run: |
pip install --break-system-packages mkdocs mkdocs-material

# Builds local HTML bundle for gem inclusion; invokes MkDocs via the project's
# venv_sh wrapper in the Rakefile (skips venv activation when no .docsenv is present)
- name: Build HTML Documentation Bundle
run: |
rake docs:build:local --trace

- name: Upload HTML Documentation Bundle
uses: actions/upload-artifact@v4
with:
name: gem-docs-site-local
path: site-local/
if-no-files-found: error
159 changes: 159 additions & 0 deletions .github/workflows/_publish-gem.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
# =========================================================================
# Ceedling - Test-Centered Build System for C
# ThrowTheSwitch.org
# Copyright (c) 2010-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
# SPDX-License-Identifier: MIT
# =========================================================================

# -----------------------------------------------------------------------
# Internal reusable workflow — not intended to be triggered directly.
# Called by prerelease.yml (with prerelease: true) and release.yml
# (with prerelease: false).
#
# Purpose:
# Stamp the gem version from the calling workflow's Git tag, build the
# Ceedling gem, and publish a GitHub release or pre-release using
# softprops/action-gh-release@v2.
#
# Version stamping:
# lib/version.rb carries a .dev suffix between releases (e.g. 1.1.1.dev).
# This job derives the actual release version from the Git tag and stamps
# it into lib/version.rb before building — the file is never manually
# edited to match a release tag.
#
# Tag-to-gem-version conversion:
# v1.1.0-pre.1 → 1.1.0.pre.1 (hyphen becomes dot: RubyGems pre-release notation)
# v1.1.0 → 1.1.0 (no suffix; substitution is a no-op)
#
# RubyGems.org publishing:
# The "Push to RubyGems.org" step below is stubbed and commented out.
# To enable automated publishing: uncomment the step and add a
# RUBYGEMS_API_KEY secret to the repository settings.
# -----------------------------------------------------------------------

---
name: "Build and Publish Gem"

on:
workflow_call:
inputs:
prerelease:
type: boolean
required: true
description: 'true = GitHub pre-release, false = full release'

# contents: write is required to create and upload GitHub releases
permissions:
contents: write

jobs:
build-and-publish:
name: "Build and Publish Ceedling Gem"
runs-on: ubuntu-latest

steps:
# Use a cache for our tools to speed up builds
# No matrix here; Ruby version is hardcoded to match the cache key format used by test jobs
- uses: actions/cache@v4
with:
path: vendor/bundle
key: bundle-use-ruby-${{ runner.os }}-3.3-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
bundle-use-ruby-${{ runner.os }}-3.3-

- name: Checkout Latest Repo
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set Up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'

- name: Install Gem Dependencies
run: |
bundle install

# Derive the gem version from the Git tag and stamp it into lib/version.rb.
# The in-tree version.rb carries a .dev suffix between releases; the release
# version is computed here from the tag and is never manually set.
- name: Stamp Gem Version from Git Tag
shell: bash
run: .github/workflows/stamp_gem_version.sh "${GITHUB_REF_NAME}" lib/version.rb

# Extract the changelog section matching this release version for use as the
# release body. The script exits 0 (found) or 1 (not found / file missing).
# Shell vars don't persist across steps; version is re-derived from the tag.
- name: Extract Changelog Section for Release Notes
id: changelog
shell: bash
run: |
# Strip the leading 'v' then take only the MAJOR.MINOR.PATCH core,
# discarding any pre-release suffix (e.g. v1.2.3-pre.1 → 1.2.3).
# Changelog entries are keyed on the semver core, not the full tag.
SEMVER="${GITHUB_REF_NAME#v}"
SEMVER="${SEMVER%%-*}"
BODY_FILE="${RUNNER_TEMP}/release_body.md" # $RUNNER_TEMP: Actions-provided temp dir

echo "found=false" >> "$GITHUB_OUTPUT"

if .github/workflows/extract_changelog.sh "${SEMVER}" "docs/Changelog.md" "${BODY_FILE}"; then
# Write the extracted markdown content as a multi-line step output.
# A unique timestamp-based delimiter guards against any text in the changelog
# accidentally matching the EOF marker and closing the heredoc early.
EOF_MARKER="RELEASE_BODY_EOF_$(date +%s)"
echo "body<<${EOF_MARKER}" >> "$GITHUB_OUTPUT"
cat "${BODY_FILE}" >> "$GITHUB_OUTPUT"
echo "${EOF_MARKER}" >> "$GITHUB_OUTPUT"
echo "found=true" >> "$GITHUB_OUTPUT"
fi

# Download HTML docs bundle built by _generate-docs.yml
# Artifacts are shared within the same workflow run by run_id
- name: Download HTML Documentation Bundle
uses: actions/download-artifact@v4
with:
name: gem-docs-site-local
path: site-local/

- name: Build Gem
run: |
gem build ceedling.gemspec

# softprops/action-gh-release@v2 replaces the archived actions/create-release@v1
# and actions/upload-release-asset@v1.
# Two conditional steps are used because the action cannot switch between
# body and generate_release_notes within a single step via expressions.

# Use the extracted changelog section as the release body when the section was found
- name: Log Release Notes Source (changelog body)
if: steps.changelog.outputs.found == 'true'
run: echo "Publishing release with Changelog.md section as release notes body."

- name: Publish GitHub Release (changelog body)
if: steps.changelog.outputs.found == 'true'
uses: softprops/action-gh-release@v2
with:
prerelease: ${{ inputs.prerelease }}
files: ceedling-*.gem
body: ${{ steps.changelog.outputs.body }}

# Fall back to GitHub's auto-generated release notes (from last commit)
# when no changelog section exists for this version
- name: Log Release Notes Source (auto-generated)
if: steps.changelog.outputs.found != 'true'
run: echo "No Changelog.md section found for this version; publishing release with GitHub auto-generated release notes."

- name: Publish GitHub Release (auto-generated notes)
if: steps.changelog.outputs.found != 'true'
uses: softprops/action-gh-release@v2
with:
prerelease: ${{ inputs.prerelease }}
files: ceedling-*.gem

# Uncomment and add RUBYGEMS_API_KEY secret to automate RubyGems.org publishing
# - name: Push to RubyGems.org
# run: gem push ceedling-*.gem
# env:
# GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
Loading
Loading