Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

First commits #1

Open
wants to merge 27 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
06e0b8a
Add versioning
jsf9k Feb 24, 2025
2c6216e
Revert link
jsf9k Feb 24, 2025
f4d983b
Add example action that simply prints a notice annotation
jsf9k Feb 24, 2025
0f95a68
Update README.md boilerplate from upstream
jsf9k Feb 24, 2025
26a14dc
Add a link to the GitHub documentation on composite actions
jsf9k Feb 24, 2025
e1054d8
Remove unwanted word
jsf9k Feb 25, 2025
23bc7e5
Use lowercase when referring to GitHub actions
jsf9k Feb 26, 2025
4156a58
Add a workflow to create major and major-minor version tags upon release
jsf9k Feb 26, 2025
66b3953
Add published as a release type that should trigger this workflow
jsf9k Feb 26, 2025
d270c90
Bump version from 0.0.1 to 1.0.0
jsf9k Feb 26, 2025
81665bd
Bump version from 1.0.0 to 1.0.0-rc.1
jsf9k Feb 26, 2025
63e96c3
Remove github.ref_type checks
jsf9k Feb 26, 2025
d2f145d
Bump version from 1.0.0-rc.1 to 1.0.0-rc.2
jsf9k Feb 26, 2025
3284849
Fix typo
jsf9k Feb 26, 2025
447a29e
Bump version from 1.0.0-rc.2 to 1.0.0-rc.3
jsf9k Feb 26, 2025
d3e1d18
Only attempt to delete tags if they actually exist
jsf9k Feb 26, 2025
3fc68f0
Bump version from 1.0.0-rc.3 to 1.0.0-rc.4
jsf9k Feb 26, 2025
9fd843f
Set default shell options
jsf9k Feb 26, 2025
a8fae25
Fix bug in shell logic
jsf9k Feb 26, 2025
911c3b7
Bump version from 1.0.0-rc.4 to 1.0.0-rc.5
jsf9k Feb 26, 2025
d7f1317
Create tags individually
jsf9k Feb 26, 2025
b8837c0
Bump version from 1.0.0-rc.5 to 1.0.0-rc.6
jsf9k Feb 26, 2025
e2ad30f
Bump version from 1.0.0-rc.6 to 1.0.0-rc.7
jsf9k Feb 26, 2025
fa725b9
Remove prereleased as a release type that should trigger this workflow
jsf9k Feb 26, 2025
666579b
Bump version from 1.0.0-rc.7 to 1.0.0-rc.8
jsf9k Feb 26, 2025
db7df1b
Add missing map key
jsf9k Feb 26, 2025
84dc3e9
Remove period from end of single-line comment
jsf9k Feb 26, 2025
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
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ jobs:
PACKAGE_URL: honnef.co/go/tools/cmd/staticcheck
PACKAGE_VERSION: ${{ steps.setup-env.outputs.staticcheck-version }}
run: go install ${PACKAGE_URL}@${PACKAGE_VERSION}
# TODO: https://github.com/cisagov/skeleton-action-composite/issues/165
# TODO: https://github.com/cisagov/skeleton-generic/issues/165
# We are temporarily using @mcdonnnj's forked branch of terraform-docs
# until his PR: https://github.com/terraform-docs/terraform-docs/pull/745
# is approved. This temporary fix will allow for ATX header support when
Expand Down
54 changes: 48 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,56 @@
[![GitHub Build Status](https://github.com/cisagov/skeleton-action-composite/workflows/build/badge.svg)](https://github.com/cisagov/skeleton-action-composite/actions)

This is a generic skeleton project that can be used to quickly get a
new [cisagov](https://github.com/cisagov) GitHub project started.
This skeleton project contains [licensing information](LICENSE), as
well as [pre-commit hooks](https://pre-commit.com) and
[GitHub Actions](https://github.com/features/actions) configurations
new [cisagov](https://github.com/cisagov) [GitHub composite
Action](https://docs.github.com/en/actions/sharing-automations/creating-actions/about-custom-actions#composite-actions)
project started. This skeleton project contains [licensing
information](LICENSE), as well as [pre-commit
hooks](https://pre-commit.com) and [GitHub
Actions](https://github.com/features/actions) configurations
appropriate for the major languages that we use.

In many cases you will instead want to use one of the more specific
skeleton projects derived from this one.
## Usage ##

### Inputs ###

None.
<!--
| Name | Description | Interpreted Type | Default | Required |
|------|-------------|------------------|---------|:--------:|
| input_name | The input's description. | `string` | n/a | yes |
-->

### Outputs ###

None.
<!--
| Name | Description | Output Type |
|------|-------------|-------------|
| output_name | The output's description. | `output_type` |
-->

### Sample GitHub Actions workflow ###

This GitHub Action only prints a notify annotation on the runner and
therefore requires no permissions.

```yml
---
name: The workflow

on:
pull_request:
push:

jobs:
my_job:
# This job does not need any permissions
permissions: {}
runs-on: ubuntu-latest
steps:
- name: Say hello
uses: cisagov/skeleton-action-composite@v1
```

## New Repositories from a Skeleton ##

Expand Down
15 changes: 15 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
author: Cybersecurity and Infrastructure Security Agency
branding:
color: blue
icon: help-circle
description: Skeleton GitHub composite action.
name: Skeleton

runs:
using: composite
steps:
- id: my-id
name: Say hello
run: "echo ::notice:: Hello, world!"
shell: bash
172 changes: 172 additions & 0 deletions bump-version
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
#!/usr/bin/env bash

# bump-version [--push] [--label LABEL] (major | minor | patch | prerelease | build | finalize | show)
# bump-version --list-files

set -o nounset
set -o errexit
set -o pipefail

# Stores the canonical version for the project.
VERSION_FILE=version.txt
# Files that should be updated with the new version.
VERSION_FILES=("$VERSION_FILE")

USAGE=$(
cat << END_OF_LINE
Update the version of the project.

Usage:
${0##*/} [--push] [--label LABEL] (major | minor | patch | prerelease | build | finalize | show)
${0##*/} --list-files
${0##*/} (-h | --help)

Options:
-h | --help Show this message.
--push Perform a \`git push\` after updating the version.
--label LABEL Specify the label to use when updating the build or prerelease version.
--list-files List the files that will be updated when the version is bumped.
END_OF_LINE
)

old_version=$(< "$VERSION_FILE")
# Comment out periods so they are interpreted as periods and don't
# just match any character
old_version_regex=${old_version//\./\\\.}
new_version="$old_version"

bump_part=""
label=""
commit_prefix="Bump"
with_push=false
commands_with_label=("build" "prerelease")
commands_with_prerelease=("major" "minor" "patch")
with_prerelease=false

#######################################
# Display an error message, the help information, and exit with a non-zero status.
# Arguments:
# Error message.
#######################################
function invalid_option() {
echo "$1"
echo "$USAGE"
exit 1
}

#######################################
# Bump the version using the provided command.
# Arguments:
# The version to bump.
# The command to bump the version.
# Returns:
# The new version.
#######################################
function bump_version() {
local temp_version
temp_version=$(python -c "import semver; print(semver.parse_version_info('$1').${2})")
echo "$temp_version"
}

if [ $# -eq 0 ]; then
echo "$USAGE"
exit 1
else
while [ $# -gt 0 ]; do
case $1 in
--push)
if [ "$with_push" = true ]; then
invalid_option "Push has already been set."
fi

with_push=true
shift
;;
--label)
if [ -n "$label" ]; then
invalid_option "Label has already been set."
fi

label="$2"
shift 2
;;
build | finalize | major | minor | patch)
if [ -n "$bump_part" ]; then
invalid_option "Only one version part should be bumped at a time."
fi

bump_part="$1"
shift
;;
prerelease)
with_prerelease=true
shift
;;
show)
echo "$old_version"
exit 0
;;
-h | --help)
echo "$USAGE"
exit 0
;;
--list-files)
printf '%s\n' "${VERSION_FILES[@]}"
exit 0
;;
*)
invalid_option "Invalid option: $1"
;;
esac
done
fi

if [ -n "$label" ] && [ "$with_prerelease" = false ] && [[ ! " ${commands_with_label[*]} " =~ [[:space:]]${bump_part}[[:space:]] ]]; then
invalid_option "Setting the label is only allowed for the following commands: ${commands_with_label[*]}"
fi

if [ "$with_prerelease" = true ] && [ -n "$bump_part" ] && [[ ! " ${commands_with_prerelease[*]} " =~ [[:space:]]${bump_part}[[:space:]] ]]; then
invalid_option "Changing the prerelease is only allowed in conjunction with the following commands: ${commands_with_prerelease[*]}"
fi

label_option=""
if [ -n "$label" ]; then
label_option="token='$label'"
fi

if [ -n "$bump_part" ]; then
if [ "$bump_part" = "finalize" ]; then
commit_prefix="Finalize"
bump_command="finalize_version()"
elif [ "$bump_part" = "build" ]; then
bump_command="bump_${bump_part}($label_option)"
else
bump_command="bump_${bump_part}()"
fi
new_version=$(bump_version "$old_version" "$bump_command")
echo Changing version from "$old_version" to "$new_version"
fi

if [ "$with_prerelease" = true ]; then
bump_command="bump_prerelease($label_option)"
temp_version=$(bump_version "$new_version" "$bump_command")
echo Changing version from "$new_version" to "$temp_version"
new_version="$temp_version"
fi

tmp_file=/tmp/version.$$
for version_file in "${VERSION_FILES[@]}"; do
if [ ! -f "$version_file" ]; then
echo Missing expected file: "$version_file"
exit 1
fi
sed "s/$old_version_regex/$new_version/" "$version_file" > $tmp_file
mv $tmp_file "$version_file"
done

git add "${VERSION_FILES[@]}"
git commit --message "$commit_prefix version from $old_version to $new_version"

if [ "$with_push" = true ]; then
git push
fi
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# The bump-version script requires at least version 3 of semver.
semver>=3
setuptools
wheel
1 change: 1 addition & 0 deletions version.txt
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we may benefit from having a tag.sh that is used solely to generate the major (vX) and minor (vX.Y) tags based on the full version tag that would generated when creating a release (if we don't want the script to just create all three and then just select the full version tag when creating the release).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking about that too. This afternoon I started creating a release workflow that will create those tags automatically when a release is created.

Copy link
Member Author

@jsf9k jsf9k Feb 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please see commits 4156a58 through 666579b, as well as the following GitHub Actions runs:

Once @mcdonnnj resolves this conversation I will do a git rebase to clean up the commit history, remove all the prereleases and tags generated during testing, etc. I think that stuff muddies the history for future folks who review the commits in this repo.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, if @cisagov/vm-dev folks have any opinions as to my use of zyactions/semver versus any of the other GH Actions listed here please let me know. There are other actions listed there that do the same thing.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.0.1
Loading