Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
20 changes: 20 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,25 @@ jobs:
version: "1.2.3"
project-name: spring-boot

action-test-compute-build-name:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '25'
cache: 'npm'
- run: npm ci
- name: Compute snapshot build name
uses: ./compute-build-name
with:
version: "6.5.0-SNAPSHOT"
- name: Compute release build name
uses: ./compute-build-name
with:
version: "6.5.0"

action-test-check-maven-artifact:
needs: test
runs-on: ubuntu-latest
Expand Down Expand Up @@ -281,6 +300,7 @@ jobs:
needs:
- test
- action-test-announce-on-gchat
- action-test-compute-build-name
- action-test-check-maven-artifact
- action-test-close-milestone
- action-test-compute-next-version
Expand Down
30 changes: 30 additions & 0 deletions action-tests/compute-build-name.act.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Act } from "@kie/act-js";
import path from "path";
import { fileURLToPath } from "url";

const __dirname = path.dirname(fileURLToPath(import.meta.url));
const repoRoot = path.join(__dirname, "..");

describe("compute-build-name", () => {
it(
"computes build name for snapshot and release versions",
async () => {
const act = new Act(repoRoot);
act.setSecret("GITHUB_TOKEN", "test-token");

const steps = await act.runEvent("push", {
workflowFile: path.join(__dirname, "compute-build-name.test.yml"),
bind: true,
});

expect(
steps.some((s) => s.name === "Main Compute snapshot build name"),
).toBe(true);
expect(
steps.some((s) => s.name === "Main Compute release build name"),
).toBe(true);
expect(steps.filter((s) => s.status === 1)).toHaveLength(0);
},
120_000,
);
});
17 changes: 17 additions & 0 deletions action-tests/compute-build-name.test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: compute-build-name
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Compute snapshot build name
uses: ./compute-build-name
with:
version: "6.5.0-SNAPSHOT"

- name: Compute release build name
uses: ./compute-build-name
with:
version: "6.5.0"
54 changes: 54 additions & 0 deletions compute-build-name/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# compute-build-name

Computes the Artifactory **build name** and **build number** from the project version and repository name.

- For SNAPSHOT versions, the branch version is derived as `MAJOR.MINOR.x`.
- For release versions (GA, milestone, RC), the version is used directly.

## Inputs

| Input | Required | Default | Description |
|-------------|----------|-----------------------------|--------------------------------------------------------------------------|
| `version` | Yes | — | The project version (e.g. `6.5.0-SNAPSHOT`, `6.5.0`, `6.5.0-M1`). |
| `repository`| No | `${{ github.repository }}` | Repository identifier (e.g. `owner/repo`). The repo name is extracted. |

## Outputs

| Output | Description |
|----------------|------------------------------------|
| `build-name` | The Artifactory build name. |

## Example usage

### Snapshot build

```yaml
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Compute version
id: version
uses: spring-io/spring-release-actions/compute-version@main

- name: Compute build name
id: build-name
uses: spring-io/spring-release-actions/compute-build-name@main
with:
version: ${{ steps.version.outputs.version }}

- name: Deploy
run: |
echo "Build: ${{ steps.build-name.outputs.build-name }}"
```

## Version behavior summary

| Version pattern | Build name |
|------------------|---------------------|
| `6.5.0-SNAPSHOT` | `{repo}-6.5.x` |
| `6.5.0` | `{repo}-6.5.0` |
| `6.5.0-M1` | `{repo}-6.5.0-M1` |
| `6.5.0-RC1` | `{repo}-6.5.0-RC1` |
18 changes: 18 additions & 0 deletions compute-build-name/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: "compute-build-name"
description: "Compute the Artifactory build name and build number"
author: "jzheaux"
inputs:
repository:
description: "The project's repository; uses the current repository by default"
required: false
version:
description: "The project version; snapshots derive MAJOR.MINOR.x, releases use the version directly"
required: true

outputs:
build-name:
description: "The Artifactory build name"

runs:
using: "node24"
main: "../dist/compute-build-name/main/index.js"
Loading
Loading