--- title: "Fledge internals" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Fledge internals} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(fledge) ``` ## Implementation The following sections explain how things actually work inside fledge. ### Updating `NEWS.md` New entries are added to `NEWS.md` from commit messages to commits in `master`. * Only top-level commits are considered (roughly equivalent to `git log --first-parent`.) The messages from these commits are parsed. Only lines that start with a star `*` or a dash `-` are included. * If a line starts with three dashes, then everything past that line is excluded. Example: the following commit message ``` Merge f-fancy-feature to master, closes #5678 - Added fancy feature (#5678). - Fixed bug as a side effect (#9012). --- The fancy feature consists of the components: - foo - bar - baz ``` will be added as below to `NEWS.md`: ``` - Added fancy feature (#5678). - Fixed bug as a side effect (#9012). ``` When retrieving the current NEWS for defining the tag message, the entries between the first two first-level headers (starting with `#`) are returned. You can use second and third level headers and add as many empty lines as you want. ### Collecting NEWS The first function to call at any stage is always `bump_version()`. This does the following 1. Calls `update_news()` to collect NEWS entries from top-level commits and to increment the version in `DESCRIPTION` and add a header to `NEWS.md`. ### Tagging for "dev" vs. other releases `bump_version()` continues depending on the release type: * `"dev"` releases: Calls `finalize_version()` to commit `DESCRIPTION` and `NEWS.md`. Also creates a tag with a message. You can always edit `NEWS.md` and call `finalize_version()` again. Both the commit and the tag will be updated. * Other releases: Calls `commit_version()` to commit `DESCRIPTION` and `NEWS.md` without tagging. In this stage, you can edit `NEWS.md` and commit as much as you like. The tag is created only after you use `tag_version()` manually.