@hivehub/rulebook 5.4.0 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -191
- package/README.md +1 -0
- package/dist/core/generator.d.ts +1 -1
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +1 -0
- package/dist/core/generator.js.map +1 -1
- package/package.json +1 -1
- package/templates/cli/gemini-extension.json +77 -77
- package/templates/core/AGENTS_LEAN.md +9 -0
- package/templates/core/CLAUDE_MD_v2.md +9 -0
- package/templates/core/WORKSPACE.md +69 -69
- package/templates/skills/core/karpathy-guidelines/SKILL.md +93 -0
- package/templates/workflows/codespell.yml +31 -31
- package/templates/workflows/cpp-lint.yml +47 -47
- package/templates/workflows/cpp-publish.yml +119 -119
- package/templates/workflows/cpp-test.yml +77 -77
- package/templates/workflows/dotnet-lint.yml +29 -29
- package/templates/workflows/dotnet-publish.yml +40 -40
- package/templates/workflows/dotnet-test.yml +41 -41
- package/templates/workflows/elixir-lint.yml +45 -45
- package/templates/workflows/elixir-publish.yml +49 -49
- package/templates/workflows/elixir-test.yml +54 -54
- package/templates/workflows/erlang-lint.yml +47 -47
- package/templates/workflows/erlang-test.yml +62 -62
- package/templates/workflows/go-lint.yml +39 -39
- package/templates/workflows/go-publish.yml +95 -95
- package/templates/workflows/go-test.yml +59 -59
- package/templates/workflows/java-lint.yml +60 -60
- package/templates/workflows/java-publish.yml +120 -120
- package/templates/workflows/java-test.yml +85 -85
- package/templates/workflows/kotlin-lint.yml +34 -34
- package/templates/workflows/kotlin-publish.yml +56 -56
- package/templates/workflows/kotlin-test.yml +48 -48
- package/templates/workflows/php-lint.yml +39 -39
- package/templates/workflows/php-publish.yml +50 -50
- package/templates/workflows/php-test.yml +54 -54
- package/templates/workflows/python-lint.yml +47 -47
- package/templates/workflows/python-publish.yml +91 -91
- package/templates/workflows/python-test.yml +59 -59
- package/templates/workflows/rust-lint.yml +54 -54
- package/templates/workflows/rust-publish.yml +66 -66
- package/templates/workflows/rust-test.yml +75 -75
- package/templates/workflows/solidity-lint.yml +41 -41
- package/templates/workflows/solidity-test.yml +47 -47
- package/templates/workflows/swift-lint.yml +32 -32
- package/templates/workflows/swift-publish.yml +58 -58
- package/templates/workflows/swift-test.yml +44 -44
- package/templates/workflows/typescript-publish.yml +60 -60
- package/templates/workflows/typescript-test.yml +73 -73
- package/templates/workflows/zig-lint.yml +27 -27
- package/templates/workflows/zig-test.yml +40 -40
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
name: Publish Go Module
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
release:
|
|
5
|
-
types: [published]
|
|
6
|
-
workflow_dispatch:
|
|
7
|
-
inputs:
|
|
8
|
-
tag:
|
|
9
|
-
description: 'Tag to publish (e.g., v1.0.0)'
|
|
10
|
-
required: true
|
|
11
|
-
|
|
12
|
-
jobs:
|
|
13
|
-
publish:
|
|
14
|
-
runs-on: ubuntu-latest
|
|
15
|
-
|
|
16
|
-
steps:
|
|
17
|
-
- uses: actions/checkout@v5
|
|
18
|
-
with:
|
|
19
|
-
ref: ${{ github.event.inputs.tag || github.ref }}
|
|
20
|
-
fetch-depth: 0 # Full history for Go modules
|
|
21
|
-
|
|
22
|
-
- name: Set up Go
|
|
23
|
-
uses: actions/setup-go@v5
|
|
24
|
-
with:
|
|
25
|
-
go-version: '1.22'
|
|
26
|
-
cache: true
|
|
27
|
-
|
|
28
|
-
- name: Verify go.mod
|
|
29
|
-
run: |
|
|
30
|
-
if [ ! -f go.mod ]; then
|
|
31
|
-
echo "Error: go.mod not found"
|
|
32
|
-
exit 1
|
|
33
|
-
fi
|
|
34
|
-
go mod verify
|
|
35
|
-
|
|
36
|
-
- name: Download dependencies
|
|
37
|
-
run: go mod download
|
|
38
|
-
|
|
39
|
-
- name: Run tests
|
|
40
|
-
run: go test -v -race -coverprofile=coverage.out ./...
|
|
41
|
-
|
|
42
|
-
- name: Run linters
|
|
43
|
-
run: |
|
|
44
|
-
go vet ./...
|
|
45
|
-
go fmt ./...
|
|
46
|
-
if [ -n "$(gofmt -l .)" ]; then
|
|
47
|
-
echo "Go files must be formatted with gofmt"
|
|
48
|
-
exit 1
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
- name: Build
|
|
52
|
-
run: go build -v ./...
|
|
53
|
-
|
|
54
|
-
- name: Verify tag format
|
|
55
|
-
run: |
|
|
56
|
-
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
57
|
-
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
|
58
|
-
echo "Error: Tag must follow semantic versioning (e.g., v1.0.0)"
|
|
59
|
-
exit 1
|
|
60
|
-
fi
|
|
61
|
-
echo "Tag format valid: $TAG"
|
|
62
|
-
|
|
63
|
-
- name: Push tag (if workflow_dispatch)
|
|
64
|
-
if: github.event_name == 'workflow_dispatch'
|
|
65
|
-
run: |
|
|
66
|
-
TAG="${{ github.event.inputs.tag }}"
|
|
67
|
-
git tag -a "$TAG" -m "Release $TAG"
|
|
68
|
-
git push origin "$TAG"
|
|
69
|
-
|
|
70
|
-
- name: Trigger pkg.go.dev update
|
|
71
|
-
run: |
|
|
72
|
-
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
73
|
-
MODULE=$(go list -m)
|
|
74
|
-
echo "Module: $MODULE"
|
|
75
|
-
echo "Version: $TAG"
|
|
76
|
-
|
|
77
|
-
# pkg.go.dev automatically indexes new tags
|
|
78
|
-
# Trigger manual update if needed
|
|
79
|
-
curl -X POST "https://proxy.golang.org/$MODULE/@v/$TAG.info" || true
|
|
80
|
-
|
|
81
|
-
echo "Published $MODULE@$TAG"
|
|
82
|
-
echo "View at: https://pkg.go.dev/$MODULE@$TAG"
|
|
83
|
-
|
|
84
|
-
- name: Create GOPROXY cache entry
|
|
85
|
-
run: |
|
|
86
|
-
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
87
|
-
MODULE=$(go list -m)
|
|
88
|
-
|
|
89
|
-
# Warm up various proxies
|
|
90
|
-
curl -f "https://proxy.golang.org/$MODULE/@v/$TAG.info" || true
|
|
91
|
-
curl -f "https://proxy.golang.org/$MODULE/@v/$TAG.mod" || true
|
|
92
|
-
curl -f "https://proxy.golang.org/$MODULE/@v/$TAG.zip" || true
|
|
93
|
-
|
|
94
|
-
echo "GOPROXY cache warmed for $MODULE@$TAG"
|
|
95
|
-
|
|
1
|
+
name: Publish Go Module
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
tag:
|
|
9
|
+
description: 'Tag to publish (e.g., v1.0.0)'
|
|
10
|
+
required: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
publish:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v5
|
|
18
|
+
with:
|
|
19
|
+
ref: ${{ github.event.inputs.tag || github.ref }}
|
|
20
|
+
fetch-depth: 0 # Full history for Go modules
|
|
21
|
+
|
|
22
|
+
- name: Set up Go
|
|
23
|
+
uses: actions/setup-go@v5
|
|
24
|
+
with:
|
|
25
|
+
go-version: '1.22'
|
|
26
|
+
cache: true
|
|
27
|
+
|
|
28
|
+
- name: Verify go.mod
|
|
29
|
+
run: |
|
|
30
|
+
if [ ! -f go.mod ]; then
|
|
31
|
+
echo "Error: go.mod not found"
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
|
34
|
+
go mod verify
|
|
35
|
+
|
|
36
|
+
- name: Download dependencies
|
|
37
|
+
run: go mod download
|
|
38
|
+
|
|
39
|
+
- name: Run tests
|
|
40
|
+
run: go test -v -race -coverprofile=coverage.out ./...
|
|
41
|
+
|
|
42
|
+
- name: Run linters
|
|
43
|
+
run: |
|
|
44
|
+
go vet ./...
|
|
45
|
+
go fmt ./...
|
|
46
|
+
if [ -n "$(gofmt -l .)" ]; then
|
|
47
|
+
echo "Go files must be formatted with gofmt"
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
- name: Build
|
|
52
|
+
run: go build -v ./...
|
|
53
|
+
|
|
54
|
+
- name: Verify tag format
|
|
55
|
+
run: |
|
|
56
|
+
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
57
|
+
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
|
58
|
+
echo "Error: Tag must follow semantic versioning (e.g., v1.0.0)"
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
echo "Tag format valid: $TAG"
|
|
62
|
+
|
|
63
|
+
- name: Push tag (if workflow_dispatch)
|
|
64
|
+
if: github.event_name == 'workflow_dispatch'
|
|
65
|
+
run: |
|
|
66
|
+
TAG="${{ github.event.inputs.tag }}"
|
|
67
|
+
git tag -a "$TAG" -m "Release $TAG"
|
|
68
|
+
git push origin "$TAG"
|
|
69
|
+
|
|
70
|
+
- name: Trigger pkg.go.dev update
|
|
71
|
+
run: |
|
|
72
|
+
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
73
|
+
MODULE=$(go list -m)
|
|
74
|
+
echo "Module: $MODULE"
|
|
75
|
+
echo "Version: $TAG"
|
|
76
|
+
|
|
77
|
+
# pkg.go.dev automatically indexes new tags
|
|
78
|
+
# Trigger manual update if needed
|
|
79
|
+
curl -X POST "https://proxy.golang.org/$MODULE/@v/$TAG.info" || true
|
|
80
|
+
|
|
81
|
+
echo "Published $MODULE@$TAG"
|
|
82
|
+
echo "View at: https://pkg.go.dev/$MODULE@$TAG"
|
|
83
|
+
|
|
84
|
+
- name: Create GOPROXY cache entry
|
|
85
|
+
run: |
|
|
86
|
+
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
87
|
+
MODULE=$(go list -m)
|
|
88
|
+
|
|
89
|
+
# Warm up various proxies
|
|
90
|
+
curl -f "https://proxy.golang.org/$MODULE/@v/$TAG.info" || true
|
|
91
|
+
curl -f "https://proxy.golang.org/$MODULE/@v/$TAG.mod" || true
|
|
92
|
+
curl -f "https://proxy.golang.org/$MODULE/@v/$TAG.zip" || true
|
|
93
|
+
|
|
94
|
+
echo "GOPROXY cache warmed for $MODULE@$TAG"
|
|
95
|
+
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
name: Go Tests
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [ master, main, develop ]
|
|
6
|
-
pull_request:
|
|
7
|
-
branches: [ '**' ]
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
test:
|
|
11
|
-
runs-on: ${{ matrix.os }}
|
|
12
|
-
strategy:
|
|
13
|
-
matrix:
|
|
14
|
-
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
15
|
-
go-version: [ '1.21', '1.22' ]
|
|
16
|
-
|
|
17
|
-
steps:
|
|
18
|
-
- uses: actions/checkout@v4
|
|
19
|
-
|
|
20
|
-
- name: Set up Go ${{ matrix.go-version }}
|
|
21
|
-
uses: actions/setup-go@v5
|
|
22
|
-
with:
|
|
23
|
-
go-version: ${{ matrix.go-version }}
|
|
24
|
-
cache: true
|
|
25
|
-
|
|
26
|
-
- name: Download dependencies
|
|
27
|
-
run: go mod download
|
|
28
|
-
|
|
29
|
-
- name: Verify dependencies
|
|
30
|
-
run: go mod verify
|
|
31
|
-
|
|
32
|
-
- name: Build
|
|
33
|
-
run: go build -v ./...
|
|
34
|
-
|
|
35
|
-
- name: Run tests
|
|
36
|
-
run: go test -v -race -coverprofile=coverage.out ./...
|
|
37
|
-
|
|
38
|
-
- name: Generate coverage report
|
|
39
|
-
if: matrix.os == 'ubuntu-latest' && matrix.go-version == '1.22'
|
|
40
|
-
run: |
|
|
41
|
-
go tool cover -func=coverage.out
|
|
42
|
-
go tool cover -html=coverage.out -o coverage.html
|
|
43
|
-
|
|
44
|
-
- name: Upload coverage to Codecov
|
|
45
|
-
uses: codecov/codecov-action@v4
|
|
46
|
-
if: matrix.os == 'ubuntu-latest' && matrix.go-version == '1.22'
|
|
47
|
-
with:
|
|
48
|
-
files: ./coverage.out
|
|
49
|
-
flags: unittests
|
|
50
|
-
fail_ci_if_error: false
|
|
51
|
-
|
|
52
|
-
- name: Security audit
|
|
53
|
-
run: |
|
|
54
|
-
echo "Running security audit..."
|
|
55
|
-
go install github.com/sonatypecommunity/nancy@latest
|
|
56
|
-
go list -json -m all | nancy sleuth || true
|
|
57
|
-
echo "Checking for outdated modules..."
|
|
58
|
-
go list -u -m all || true
|
|
59
|
-
|
|
1
|
+
name: Go Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master, main, develop ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ '**' ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ${{ matrix.os }}
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
15
|
+
go-version: [ '1.21', '1.22' ]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Set up Go ${{ matrix.go-version }}
|
|
21
|
+
uses: actions/setup-go@v5
|
|
22
|
+
with:
|
|
23
|
+
go-version: ${{ matrix.go-version }}
|
|
24
|
+
cache: true
|
|
25
|
+
|
|
26
|
+
- name: Download dependencies
|
|
27
|
+
run: go mod download
|
|
28
|
+
|
|
29
|
+
- name: Verify dependencies
|
|
30
|
+
run: go mod verify
|
|
31
|
+
|
|
32
|
+
- name: Build
|
|
33
|
+
run: go build -v ./...
|
|
34
|
+
|
|
35
|
+
- name: Run tests
|
|
36
|
+
run: go test -v -race -coverprofile=coverage.out ./...
|
|
37
|
+
|
|
38
|
+
- name: Generate coverage report
|
|
39
|
+
if: matrix.os == 'ubuntu-latest' && matrix.go-version == '1.22'
|
|
40
|
+
run: |
|
|
41
|
+
go tool cover -func=coverage.out
|
|
42
|
+
go tool cover -html=coverage.out -o coverage.html
|
|
43
|
+
|
|
44
|
+
- name: Upload coverage to Codecov
|
|
45
|
+
uses: codecov/codecov-action@v4
|
|
46
|
+
if: matrix.os == 'ubuntu-latest' && matrix.go-version == '1.22'
|
|
47
|
+
with:
|
|
48
|
+
files: ./coverage.out
|
|
49
|
+
flags: unittests
|
|
50
|
+
fail_ci_if_error: false
|
|
51
|
+
|
|
52
|
+
- name: Security audit
|
|
53
|
+
run: |
|
|
54
|
+
echo "Running security audit..."
|
|
55
|
+
go install github.com/sonatypecommunity/nancy@latest
|
|
56
|
+
go list -json -m all | nancy sleuth || true
|
|
57
|
+
echo "Checking for outdated modules..."
|
|
58
|
+
go list -u -m all || true
|
|
59
|
+
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
name: Java Lint
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [ master, main, develop ]
|
|
6
|
-
pull_request:
|
|
7
|
-
branches: [ '**' ]
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
lint-maven:
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
if: hashFiles('**/pom.xml') != ''
|
|
13
|
-
|
|
14
|
-
steps:
|
|
15
|
-
- uses: actions/checkout@v4
|
|
16
|
-
|
|
17
|
-
- name: Set up JDK 21
|
|
18
|
-
uses: actions/setup-java@v4
|
|
19
|
-
with:
|
|
20
|
-
java-version: '21'
|
|
21
|
-
distribution: 'temurin'
|
|
22
|
-
cache: maven
|
|
23
|
-
|
|
24
|
-
- name: Run Checkstyle
|
|
25
|
-
run: mvn checkstyle:check
|
|
26
|
-
continue-on-error: true
|
|
27
|
-
|
|
28
|
-
- name: Run PMD
|
|
29
|
-
run: mvn pmd:check
|
|
30
|
-
continue-on-error: true
|
|
31
|
-
|
|
32
|
-
- name: Run SpotBugs
|
|
33
|
-
run: mvn spotbugs:check
|
|
34
|
-
continue-on-error: true
|
|
35
|
-
|
|
36
|
-
lint-gradle:
|
|
37
|
-
runs-on: ubuntu-latest
|
|
38
|
-
if: hashFiles('**/build.gradle*') != ''
|
|
39
|
-
|
|
40
|
-
steps:
|
|
41
|
-
- uses: actions/checkout@v4
|
|
42
|
-
|
|
43
|
-
- name: Set up JDK 21
|
|
44
|
-
uses: actions/setup-java@v4
|
|
45
|
-
with:
|
|
46
|
-
java-version: '21'
|
|
47
|
-
distribution: 'temurin'
|
|
48
|
-
cache: gradle
|
|
49
|
-
|
|
50
|
-
- name: Grant execute permission for gradlew
|
|
51
|
-
run: chmod +x gradlew
|
|
52
|
-
|
|
53
|
-
- name: Run Checkstyle
|
|
54
|
-
run: ./gradlew checkstyleMain checkstyleTest
|
|
55
|
-
continue-on-error: true
|
|
56
|
-
|
|
57
|
-
- name: Run SpotBugs
|
|
58
|
-
run: ./gradlew spotbugsMain spotbugsTest
|
|
59
|
-
continue-on-error: true
|
|
60
|
-
|
|
1
|
+
name: Java Lint
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master, main, develop ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ '**' ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
lint-maven:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
if: hashFiles('**/pom.xml') != ''
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Set up JDK 21
|
|
18
|
+
uses: actions/setup-java@v4
|
|
19
|
+
with:
|
|
20
|
+
java-version: '21'
|
|
21
|
+
distribution: 'temurin'
|
|
22
|
+
cache: maven
|
|
23
|
+
|
|
24
|
+
- name: Run Checkstyle
|
|
25
|
+
run: mvn checkstyle:check
|
|
26
|
+
continue-on-error: true
|
|
27
|
+
|
|
28
|
+
- name: Run PMD
|
|
29
|
+
run: mvn pmd:check
|
|
30
|
+
continue-on-error: true
|
|
31
|
+
|
|
32
|
+
- name: Run SpotBugs
|
|
33
|
+
run: mvn spotbugs:check
|
|
34
|
+
continue-on-error: true
|
|
35
|
+
|
|
36
|
+
lint-gradle:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
if: hashFiles('**/build.gradle*') != ''
|
|
39
|
+
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v4
|
|
42
|
+
|
|
43
|
+
- name: Set up JDK 21
|
|
44
|
+
uses: actions/setup-java@v4
|
|
45
|
+
with:
|
|
46
|
+
java-version: '21'
|
|
47
|
+
distribution: 'temurin'
|
|
48
|
+
cache: gradle
|
|
49
|
+
|
|
50
|
+
- name: Grant execute permission for gradlew
|
|
51
|
+
run: chmod +x gradlew
|
|
52
|
+
|
|
53
|
+
- name: Run Checkstyle
|
|
54
|
+
run: ./gradlew checkstyleMain checkstyleTest
|
|
55
|
+
continue-on-error: true
|
|
56
|
+
|
|
57
|
+
- name: Run SpotBugs
|
|
58
|
+
run: ./gradlew spotbugsMain spotbugsTest
|
|
59
|
+
continue-on-error: true
|
|
60
|
+
|
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
name: Publish Java Package
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
release:
|
|
5
|
-
types: [published]
|
|
6
|
-
workflow_dispatch:
|
|
7
|
-
inputs:
|
|
8
|
-
tag:
|
|
9
|
-
description: 'Tag to publish (e.g., v1.0.0)'
|
|
10
|
-
required: true
|
|
11
|
-
|
|
12
|
-
jobs:
|
|
13
|
-
publish-maven:
|
|
14
|
-
runs-on: ubuntu-latest
|
|
15
|
-
if: hashFiles('**/pom.xml') != ''
|
|
16
|
-
permissions:
|
|
17
|
-
contents: read
|
|
18
|
-
packages: write
|
|
19
|
-
|
|
20
|
-
steps:
|
|
21
|
-
- uses: actions/checkout@v5
|
|
22
|
-
with:
|
|
23
|
-
ref: ${{ github.event.inputs.tag || github.ref }}
|
|
24
|
-
|
|
25
|
-
- name: Set up JDK
|
|
26
|
-
uses: actions/setup-java@v4
|
|
27
|
-
with:
|
|
28
|
-
java-version: '21'
|
|
29
|
-
distribution: 'temurin'
|
|
30
|
-
cache: 'maven'
|
|
31
|
-
server-id: central # For Maven Central
|
|
32
|
-
server-username: MAVEN_USERNAME
|
|
33
|
-
server-password: MAVEN_PASSWORD
|
|
34
|
-
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
|
|
35
|
-
gpg-passphrase: MAVEN_GPG_PASSPHRASE
|
|
36
|
-
|
|
37
|
-
- name: Verify version matches tag
|
|
38
|
-
run: |
|
|
39
|
-
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
40
|
-
TAG_VERSION="${TAG#v}"
|
|
41
|
-
POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
|
|
42
|
-
if [ "$POM_VERSION" != "$TAG_VERSION" ]; then
|
|
43
|
-
echo "Error: pom.xml version ($POM_VERSION) does not match tag ($TAG_VERSION)"
|
|
44
|
-
exit 1
|
|
45
|
-
fi
|
|
46
|
-
echo "Version check passed: $POM_VERSION"
|
|
47
|
-
|
|
48
|
-
- name: Run tests
|
|
49
|
-
run: mvn -B test
|
|
50
|
-
|
|
51
|
-
- name: Build package
|
|
52
|
-
run: mvn -B clean package -DskipTests
|
|
53
|
-
|
|
54
|
-
- name: Publish to GitHub Packages
|
|
55
|
-
run: mvn -B deploy -DskipTests
|
|
56
|
-
env:
|
|
57
|
-
MAVEN_USERNAME: ${{ github.actor }}
|
|
58
|
-
MAVEN_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
|
|
59
|
-
|
|
60
|
-
- name: Publish to Maven Central
|
|
61
|
-
if: secrets.MAVEN_USERNAME != ''
|
|
62
|
-
run: mvn -B deploy -DskipTests -P release
|
|
63
|
-
env:
|
|
64
|
-
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
|
|
65
|
-
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
|
|
66
|
-
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
|
|
67
|
-
|
|
68
|
-
publish-gradle:
|
|
69
|
-
runs-on: ubuntu-latest
|
|
70
|
-
if: hashFiles('**/build.gradle*') != ''
|
|
71
|
-
permissions:
|
|
72
|
-
contents: read
|
|
73
|
-
packages: write
|
|
74
|
-
|
|
75
|
-
steps:
|
|
76
|
-
- uses: actions/checkout@v5
|
|
77
|
-
with:
|
|
78
|
-
ref: ${{ github.event.inputs.tag || github.ref }}
|
|
79
|
-
|
|
80
|
-
- name: Set up JDK
|
|
81
|
-
uses: actions/setup-java@v4
|
|
82
|
-
with:
|
|
83
|
-
java-version: '21'
|
|
84
|
-
distribution: 'temurin'
|
|
85
|
-
cache: 'gradle'
|
|
86
|
-
|
|
87
|
-
- name: Grant execute permission for gradlew
|
|
88
|
-
run: chmod +x gradlew
|
|
89
|
-
|
|
90
|
-
- name: Verify version matches tag
|
|
91
|
-
run: |
|
|
92
|
-
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
93
|
-
TAG_VERSION="${TAG#v}"
|
|
94
|
-
GRADLE_VERSION=$(./gradlew properties -q | grep "^version:" | awk '{print $2}')
|
|
95
|
-
if [ "$GRADLE_VERSION" != "$TAG_VERSION" ]; then
|
|
96
|
-
echo "Error: build.gradle version ($GRADLE_VERSION) does not match tag ($TAG_VERSION)"
|
|
97
|
-
exit 1
|
|
98
|
-
fi
|
|
99
|
-
echo "Version check passed: $GRADLE_VERSION"
|
|
100
|
-
|
|
101
|
-
- name: Run tests
|
|
102
|
-
run: ./gradlew test
|
|
103
|
-
|
|
104
|
-
- name: Build package
|
|
105
|
-
run: ./gradlew build -x test
|
|
106
|
-
|
|
107
|
-
- name: Publish to GitHub Packages
|
|
108
|
-
run: ./gradlew publish
|
|
109
|
-
env:
|
|
110
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
111
|
-
|
|
112
|
-
- name: Publish to Maven Central
|
|
113
|
-
if: secrets.SIGNING_KEY != ''
|
|
114
|
-
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
|
|
115
|
-
env:
|
|
116
|
-
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
|
|
117
|
-
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
|
|
118
|
-
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
|
119
|
-
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
|
|
120
|
-
|
|
1
|
+
name: Publish Java Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
tag:
|
|
9
|
+
description: 'Tag to publish (e.g., v1.0.0)'
|
|
10
|
+
required: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
publish-maven:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
if: hashFiles('**/pom.xml') != ''
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
packages: write
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v5
|
|
22
|
+
with:
|
|
23
|
+
ref: ${{ github.event.inputs.tag || github.ref }}
|
|
24
|
+
|
|
25
|
+
- name: Set up JDK
|
|
26
|
+
uses: actions/setup-java@v4
|
|
27
|
+
with:
|
|
28
|
+
java-version: '21'
|
|
29
|
+
distribution: 'temurin'
|
|
30
|
+
cache: 'maven'
|
|
31
|
+
server-id: central # For Maven Central
|
|
32
|
+
server-username: MAVEN_USERNAME
|
|
33
|
+
server-password: MAVEN_PASSWORD
|
|
34
|
+
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
|
|
35
|
+
gpg-passphrase: MAVEN_GPG_PASSPHRASE
|
|
36
|
+
|
|
37
|
+
- name: Verify version matches tag
|
|
38
|
+
run: |
|
|
39
|
+
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
40
|
+
TAG_VERSION="${TAG#v}"
|
|
41
|
+
POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
|
|
42
|
+
if [ "$POM_VERSION" != "$TAG_VERSION" ]; then
|
|
43
|
+
echo "Error: pom.xml version ($POM_VERSION) does not match tag ($TAG_VERSION)"
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
echo "Version check passed: $POM_VERSION"
|
|
47
|
+
|
|
48
|
+
- name: Run tests
|
|
49
|
+
run: mvn -B test
|
|
50
|
+
|
|
51
|
+
- name: Build package
|
|
52
|
+
run: mvn -B clean package -DskipTests
|
|
53
|
+
|
|
54
|
+
- name: Publish to GitHub Packages
|
|
55
|
+
run: mvn -B deploy -DskipTests
|
|
56
|
+
env:
|
|
57
|
+
MAVEN_USERNAME: ${{ github.actor }}
|
|
58
|
+
MAVEN_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
|
|
59
|
+
|
|
60
|
+
- name: Publish to Maven Central
|
|
61
|
+
if: secrets.MAVEN_USERNAME != ''
|
|
62
|
+
run: mvn -B deploy -DskipTests -P release
|
|
63
|
+
env:
|
|
64
|
+
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
|
|
65
|
+
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
|
|
66
|
+
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
|
|
67
|
+
|
|
68
|
+
publish-gradle:
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
if: hashFiles('**/build.gradle*') != ''
|
|
71
|
+
permissions:
|
|
72
|
+
contents: read
|
|
73
|
+
packages: write
|
|
74
|
+
|
|
75
|
+
steps:
|
|
76
|
+
- uses: actions/checkout@v5
|
|
77
|
+
with:
|
|
78
|
+
ref: ${{ github.event.inputs.tag || github.ref }}
|
|
79
|
+
|
|
80
|
+
- name: Set up JDK
|
|
81
|
+
uses: actions/setup-java@v4
|
|
82
|
+
with:
|
|
83
|
+
java-version: '21'
|
|
84
|
+
distribution: 'temurin'
|
|
85
|
+
cache: 'gradle'
|
|
86
|
+
|
|
87
|
+
- name: Grant execute permission for gradlew
|
|
88
|
+
run: chmod +x gradlew
|
|
89
|
+
|
|
90
|
+
- name: Verify version matches tag
|
|
91
|
+
run: |
|
|
92
|
+
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
|
93
|
+
TAG_VERSION="${TAG#v}"
|
|
94
|
+
GRADLE_VERSION=$(./gradlew properties -q | grep "^version:" | awk '{print $2}')
|
|
95
|
+
if [ "$GRADLE_VERSION" != "$TAG_VERSION" ]; then
|
|
96
|
+
echo "Error: build.gradle version ($GRADLE_VERSION) does not match tag ($TAG_VERSION)"
|
|
97
|
+
exit 1
|
|
98
|
+
fi
|
|
99
|
+
echo "Version check passed: $GRADLE_VERSION"
|
|
100
|
+
|
|
101
|
+
- name: Run tests
|
|
102
|
+
run: ./gradlew test
|
|
103
|
+
|
|
104
|
+
- name: Build package
|
|
105
|
+
run: ./gradlew build -x test
|
|
106
|
+
|
|
107
|
+
- name: Publish to GitHub Packages
|
|
108
|
+
run: ./gradlew publish
|
|
109
|
+
env:
|
|
110
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
111
|
+
|
|
112
|
+
- name: Publish to Maven Central
|
|
113
|
+
if: secrets.SIGNING_KEY != ''
|
|
114
|
+
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
|
|
115
|
+
env:
|
|
116
|
+
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
|
|
117
|
+
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
|
|
118
|
+
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
|
119
|
+
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
|
|
120
|
+
|