Scripts

April 27, 2026 · View on GitHub

Shell scripts used by reusable CI workflows for building, validating, publishing, and summarizing.

scripts/
├── android/
│   ├── build-gradle.sh                       # Run Gradle build tasks with optional test skip
│   ├── decode-keystore.sh                    # Decode Base64 Android keystore to file
│   ├── generate-artifact-names.sh            # Generate standardized APK/AAB artifact names
│   ├── get-version-info.sh                   # Read version from gradle.properties
│   ├── list-built-artifacts.sh               # List discovered Android build artifacts
│   └── resolve-build-tasks.sh               # Resolve Gradle build tasks from flavor/type
├── apple/
│   ├── archive-app.sh                        # Build Xcode archive (.xcarchive)
│   ├── export-ipa.sh                         # Export IPA from Xcode archive
│   ├── get-version-info.sh                   # Read version from Xcode project/workspace
│   ├── list-built-artifacts.sh               # List discovered Apple build artifacts
│   └── setup-code-signing.sh                 # Configure Xcode code signing keychain
├── ci/
│   ├── env.sh                                # CI platform environment abstraction
│   ├── install-syft.sh                       # Install Syft SBOM generator
│   ├── install-trivy.sh                      # Install Trivy vulnerability scanner
│   ├── output.sh                             # CI output and summary helpers
│   └── stage-result.sh                       # Stage result aggregation helpers
├── config/
│   ├── expand-sboms.sh                       # Expand the sboms enum to a JSON array of CISA layer names
│   ├── get-file-pattern.sh                   # Get file pattern by project type (supports env vars or positional args)
│   └── parse-artifacts-config.sh             # Parse artifacts.yml configuration
├── container/
│   ├── build-project.sh                      # Build project before container image creation
│   ├── extract-npm-tarball.sh                # Extract NPM tarball for container builds
│   ├── resolve-image-name.sh                # Resolve full container image name with registry
│   ├── validate-artifacts.sh                 # Validate artifacts exist before container build
│   ├── validate-containerfile.sh             # Validate Containerfile/Dockerfile exists
│   ├── validate-namespace.sh                 # Validate container image namespace matches repo
│   └── write-image-details.sh               # Write container image details to GITHUB_OUTPUT
├── plan/
│   ├── resolve-release-plan.sh               # Resolve release plan from policy and context JSON
│   ├── write-dev-release-interface.sh        # Write dev release orchestrator interface outputs
│   ├── write-pr-interface.sh                 # Write PR orchestrator interface outputs
│   └── write-release-interface.sh            # Write release orchestrator interface outputs
├── registry/
│   └── validate-auth.sh                      # Validate registry authentication (supports env vars or positional args)
├── security/
│   └── scan-dependencies.sh                  # Scan dependencies for vulnerabilities (Trivy)
├── release/
│   ├── create-github-release.sh              # Create GitHub Release with artifacts
│   ├── create-sbom-zip.sh                    # Package SBOM layers into ZIP archive (optional GPG signing)
│   ├── generate-checksums.sh                 # Generate SHA256 checksums for release artifacts
│   ├── prepare-release-notes.sh              # Prepare release notes from changelog
│   ├── resolve-artifact-name.sh             # Resolve artifact name from repo/config
│   ├── resolve-release-metadata.sh           # Resolve release metadata (version, tag, branch)
│   └── sign-release-artifacts.sh             # GPG-sign release artifacts
├── sbom/
│   ├── find-container-sbom.sh                # Find container SBOM files in artifacts
│   ├── generate-container-sbom-artifacts.sh  # Generate container SBOM artifact outputs
│   ├── generate-container-sbom.sh            # Generate container image SBOMs with Syft
│   └── generate-sboms.sh                     # Generate SPDX/CycloneDX SBOMs for all layers
├── summary/
│   ├── write-android-build-summary.sh        # Android build step summary
│   ├── write-appstore-summary.sh             # Apple App Store publish step summary
│   ├── write-build-stage-result.sh           # Release build stage result output
│   ├── write-dev-build-stage-result.sh       # Dev build stage result output
│   ├── write-dev-publish-stage-result.sh     # Dev publish stage result output
│   ├── write-dev-release-summary.sh          # Dev release step summary
│   ├── write-google-play-summary.sh          # Google Play publish step summary
│   ├── write-gradle-build-summary.sh         # Gradle build step summary
│   ├── write-maven-build-summary.sh          # Maven build step summary
│   ├── write-npm-build-summary.sh            # NPM build step summary
│   ├── write-pr-quality-stage-result.sh      # PR quality stage result output
│   ├── write-pr-summary.sh                   # PR pipeline step summary
│   ├── write-prepare-stage-result.sh         # Release prepare stage result output
│   ├── write-prerequisites-summary.sh        # Release validation report step summary
│   ├── write-publish-stage-result.sh         # Release publish stage result output
│   ├── write-quality-check-status.sh         # Quality check status table step summary
│   ├── write-release-summary.sh              # Release pipeline step summary
│   └── write-xcode-build-summary.sh          # Xcode build step summary
├── validate/
│   ├── authorization.sh                     # Validate release actor authorization
│   ├── bot-permissions.sh                   # Validate bot account permissions
│   ├── workflow-input-defaults.sh            # Validate workflow input defaults
│   ├── github-token.sh                      # Validate GitHub token type and permissions
│   ├── mavencentral-credentials.sh          # Validate Maven Central credentials are set
│   ├── tag-commit.sh                        # Verify tag commit in branch history
│   ├── tag-format.sh                        # Verify semantic version format
│   ├── tag-signature.sh                     # Verify GPG/SSH tag signature
│   └── tag-uniqueness.sh                    # Verify tag is unique across remotes
├── version/
│   ├── bump-version.sh                       # Update version in build config files
│   ├── generate-dev-version.sh               # Generate dev version string from branch/SHA
│   ├── move-tag.sh                           # Move existing git tag to new commit
│   ├── read-minimal-changelog.sh             # Read latest changelog entry
│   └── validate-full-changelog.sh            # Validate CHANGELOG.md exists and has content

Android

Scripts for Android Gradle builds.

ScriptPurpose
build-gradle.shRuns ./gradlew with task list, optionally skipping tests
decode-keystore.shDecodes Base64-encoded ANDROID_KEYSTORE_BASE64 to a keystore file, outputs path
generate-artifact-names.shGenerates standardized names for APK/AAB files with date stamp
get-version-info.shReads versionName and versionCode from gradle.properties
list-built-artifacts.shLists APK/AAB files found after build
resolve-build-tasks.shResolves Gradle task list from flavor, build types, and AAB settings

Apple

Scripts for Xcode/iOS builds, code signing, and version info.

ScriptPurpose
archive-app.shRuns xcodebuild archive with workspace/project, scheme, and code signing config
export-ipa.shExports IPA from .xcarchive using decoded export options plist
get-version-info.shReads version and build number from Xcode project/workspace
list-built-artifacts.shLists IPA and xcarchive files found after build
setup-code-signing.shConfigures code signing keychain with certificate and provisioning profile

Config

Scripts for build configuration resolution.

ScriptPurpose
get-file-pattern.shReturns git file pattern by project type (supports env vars or positional args)
parse-artifacts-config.shParses artifacts.yml to resolve build targets, container config, and publish targets

Container

Scripts for container image builds and validation.

ScriptPurpose
build-project.shRuns project build (Maven/NPM/Gradle) before container image creation
extract-npm-tarball.shExtracts NPM tarball into context directory for container builds
resolve-image-name.shResolves full image name with registry prefix from inputs
write-image-details.shWrites image name, digest, and tags to GITHUB_OUTPUT
validate-artifacts.shChecks build artifacts exist before container build; warns on Containerfile rebuilds
validate-containerfile.shValidates that the Containerfile/Dockerfile exists at the given path
validate-namespace.shValidates container image namespace matches repository owner

Plan

Scripts that produce orchestrator interface outputs (context JSON, policy JSON).

ScriptPurpose
resolve-release-plan.shResolves release execution plan from policy and context JSON
write-dev-release-interface.shWrites dev release orchestrator context and policy outputs
write-pr-interface.shWrites PR orchestrator context and policy outputs
write-release-interface.shWrites release orchestrator context and policy outputs

Registry

ScriptPurpose
validate-auth.shValidates registry authentication configuration (supports env vars or positional args)

Security

Scripts for dependency and vulnerability scanning.

ScriptPurpose
scan-dependencies.shScans project dependencies for known vulnerabilities using Trivy. Supports diff mode (only new vulnerabilities fail) and full scan mode. Produces SARIF for GitHub Code Scanning annotations.

Release

Scripts for release artifact management and GitHub Release creation.

ScriptPurpose
create-github-release.shCreates GitHub Release with artifacts, signatures, SBOMs, and checksums
create-sbom-zip.shPackages all SBOM layers (source, analyzed-artifact, analyzed-container) into ZIP; optionally GPG-signs
generate-checksums.shGenerates SHA256 checksums for all release artifacts
prepare-release-notes.shExtracts release notes from changelog for the current version
resolve-artifact-name.shResolves artifact name from repository name or config
resolve-release-metadata.shResolves release metadata (version, tag, branch, actor)
sign-release-artifacts.shGPG-signs release artifacts (JARs, ZIPs, tarballs, checksums)

SBOM

Scripts for Software Bill of Materials generation.

ScriptPurpose
find-container-sbom.shFinds container SBOM files in artifact directories
generate-container-sbom-artifacts.shGenerates container SBOM artifact outputs for download
generate-container-sbom.shGenerates container image SBOMs using Syft
generate-sboms.shMain SBOM generator — produces SPDX 2.3 and CycloneDX 1.6 for all layers

generate-sboms.sh

Generates SBOM files in SPDX 2.3 and CycloneDX 1.6 JSON formats using Syft.

Syntax:

bash generate-sboms.sh [PROJECT_TYPE] [LAYERS] [VERSION] [PROJECT_NAME] [WORKING_DIR] [CONTAINER_IMAGE]

Parameters:

ParameterDefaultExample
PROJECT_TYPEautomaven, npm, gradle
LAYERSsourcesource,build,analyzed-artifact,analyzed-container
VERSIONauto-detect1.0.0
PROJECT_NAMEauto-detectmy-app
WORKING_DIR./path/to/project
CONTAINER_IMAGE-ghcr.io/org/app@sha256:...

Layer outputs by project type:

LayerParameterMavenNPMGradle
Sourcesource*-pom-sbom.**-package-sbom.**-gradle-sbom.*
Buildbuild*-<sha>-build-sbom.cyclonedx.json--
Analyzed Artifactanalyzed-artifact*-<sha>-analyzed-jar-sbom.**-<sha>-analyzed-tararchive-sbom.**-<sha>-analyzed-jar-sbom.*
Analyzed Containeranalyzed-container*-<sha>-analyzed-container-sbom.**-<sha>-analyzed-container-sbom.**-<sha>-analyzed-container-sbom.*

The <sha> is the short commit SHA injected for traceability when running inside a git repo. For Rust/Go the analyzed type is analyzed-binary; for Python it is analyzed-wheel.


Summary

Scripts that write GitHub Actions step summaries and stage result outputs.

Stage result scripts produce structured JSON outputs consumed by orchestrators:

ScriptUsed by
write-build-stage-result.shRelease build stage
write-prepare-stage-result.shRelease prepare stage
write-publish-stage-result.shRelease publish stage
write-dev-build-stage-result.shDev build stage
write-dev-publish-stage-result.shDev publish stage
write-pr-quality-stage-result.shPR quality stage

Validation and quality summary scripts:

ScriptUsed by
write-prerequisites-summary.shRelease prerequisites validation
write-quality-check-status.shPR quality check results

Pipeline summary scripts produce human-readable step summaries:

ScriptUsed by
write-release-summary.shRelease orchestrator
write-dev-release-summary.shDev release orchestrator
write-pr-summary.shPR orchestrator

Build summary scripts produce per-build-type step summaries:

ScriptUsed by
write-maven-build-summary.shMaven build workflow
write-npm-build-summary.shNPM build workflow
write-gradle-build-summary.shGradle build workflow
write-android-build-summary.shAndroid build workflow
write-xcode-build-summary.shXcode build workflow
write-appstore-summary.shApp Store publish workflow
write-google-play-summary.shGoogle Play publish workflow

Validate

Scripts for release prerequisite validation.

ScriptPurpose
authorization.shValidates release actor is authorized
bot-permissions.shValidates bot account has required permissions
workflow-input-defaults.shValidates workflow input defaults match documentation
github-token.shValidates GitHub token type and permissions
mavencentral-credentials.shValidates Maven Central credentials are set
tag-commit.shVerifies tag commit exists in target branch history
tag-format.shVerifies tag follows semantic versioning (vX.Y.Z[-prerelease])
tag-signature.shVerifies tag is annotated and GPG/SSH signed
tag-uniqueness.shVerifies tag is unique across remotes

Version

Scripts for version management.

ScriptPurpose
bump-version.shUpdates version in pom.xml / package.json / gradle.properties / xcconfig
generate-dev-version.shGenerates dev version string from branch name and short SHA
move-tag.shMoves existing git tag to current HEAD
read-minimal-changelog.shReads the latest entry from CHANGELOG.md
validate-full-changelog.shValidates CHANGELOG.md exists and has content

bump-version.sh

Syntax:

bash bump-version.sh <project-type> <version> [working-dir] [gradle-version-file]
TypeActionFiles Updated
Mavenmvn versions:setpom.xml (all modules)
NPMnpm versionpackage.json, package-lock.json
Gradle (JVM)Updates version=gradle.properties
Gradle AndroidUpdates versionName= and increments versionCode=gradle.properties
Xcode iOSUpdates MARKETING_VERSIONversions.xcconfig
MetaNo file updateChangelog only

Usage in Workflows

Most projects use the orchestrators directly. For custom workflows:

- uses: actions/checkout@v4
  with:
    repository: diggsweden/reusable-ci
    path: .reusable-ci
    sparse-checkout: scripts/sbom

- run: |
    bash .reusable-ci/scripts/sbom/generate-sboms.sh \
      maven "source,analyzed-artifact" "$VERSION" "$PROJECT_NAME"