4
4
push :
5
5
tags :
6
6
- ' v*'
7
+ workflow_dispatch :
8
+ inputs :
9
+ snapshot :
10
+ description : ' Create snapshot release'
11
+ required : false
12
+ default : false
13
+ type : boolean
7
14
8
15
permissions :
9
16
contents : write
17
+ packages : write
10
18
11
19
jobs :
12
- build_and_release :
20
+ release :
13
21
runs-on : ubuntu-latest
14
22
steps :
15
23
- name : Checkout
@@ -20,97 +28,115 @@ jobs:
20
28
- name : Set up Go
21
29
uses : actions/setup-go@v5
22
30
with :
23
- go-version : ^v1.24
24
-
25
- - name : Build
26
- run : make build
31
+ go-version : ' 1.24'
32
+ cache : true
33
+
34
+ - name : Set SOURCE_DATE_EPOCH for reproducible builds
35
+ run : echo "SOURCE_DATE_EPOCH=$(git log -1 --format=%ct)" >> $GITHUB_ENV
36
+
37
+ - name : Set up packaging dependencies
38
+ run : |
39
+ # Install nfpm for packaging
40
+ echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | sudo tee /etc/apt/sources.list.d/goreleaser.list
41
+ sudo apt-get update
42
+ sudo apt-get install -y nfpm
43
+
44
+ - name : Import GPG key (if available)
45
+ id : import_gpg
46
+ uses : crazy-max/ghaction-import-gpg@v6
47
+ if : env.GPG_PRIVATE_KEY != ''
48
+ with :
49
+ gpg_private_key : ${{ secrets.GPG_PRIVATE_KEY }}
50
+ passphrase : ${{ secrets.GPG_PASSPHRASE }}
51
+ env :
52
+ GPG_PRIVATE_KEY : ${{ secrets.GPG_PRIVATE_KEY }}
27
53
28
- # https://goreleaser.com/cmd/goreleaser_release/
29
- - name : Run GoReleaser
54
+ - name : Run GoReleaser (Release)
30
55
uses : goreleaser/goreleaser-action@v6
56
+ if : startsWith(github.ref, 'refs/tags/') && !inputs.snapshot
31
57
with :
32
58
distribution : goreleaser
33
59
version : " ~> v2"
34
- args : release --config .goreleaser.yaml
60
+ args : release --clean
35
61
env :
36
62
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
63
+ SOURCE_DATE_EPOCH : ${{ env.SOURCE_DATE_EPOCH }}
64
+ GPG_KEY_PATH : ${{ steps.import_gpg.outputs.keyid && format('/tmp/gpg-{0}.key', steps.import_gpg.outputs.keyid) || '' }}
65
+ NFPM_PASSPHRASE : ${{ secrets.GPG_PASSPHRASE }}
37
66
38
- # docker-image:
39
- # name: Publish Docker Image
40
- # runs-on: ubuntu-latest
41
-
42
- # steps:
43
- # - name: Checkout sources
44
- # uses: actions/checkout@v2
45
-
46
- # - name: Get tag version
47
- # run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
48
-
49
- # - name: Print version
50
- # run: |
51
- # echo $RELEASE_VERSION
52
- # echo ${{ env.RELEASE_VERSION }}
53
-
54
- # - name: Set up QEMU
55
- # uses: docker/setup-qemu-action@v3
56
-
57
- # - name: Set up Docker Buildx
58
- # uses: docker/setup-buildx-action@v3
59
-
60
- # - name: Extract metadata (tags, labels) for Docker
61
- # id: meta
62
- # uses: docker/metadata-action@v5
63
- # with:
64
- # images: flashbots/go-template
65
- # tags: |
66
- # type=sha
67
- # type=pep440,pattern={{version}}
68
- # type=pep440,pattern={{major}}.{{minor}}
69
- # type=raw,value=latest,enable=${{ !contains(env.RELEASE_VERSION, '-') }}
70
-
71
- # - name: Login to DockerHub
72
- # uses: docker/login-action@v3
73
- # with:
74
- # username: ${{ secrets.DOCKERHUB_USERNAME }}
75
- # password: ${{ secrets.DOCKERHUB_TOKEN }}
76
-
77
- # - name: Go Build Cache for Docker
78
- # uses: actions/cache@v3
79
- # with:
80
- # path: go-build-cache
81
- # key: ${{ runner.os }}-go-build-cache-${{ hashFiles('**/go.sum') }}
82
-
83
- # - name: inject go-build-cache into docker
84
- # uses: reproducible-containers/[email protected]
85
- # with:
86
- # cache-source: go-build-cache
87
-
88
- # - name: Build and push
89
- # uses: docker/build-push-action@v5
90
- # with:
91
- # context: .
92
- # build-args: |
93
- # VERSION=${{ env.RELEASE_VERSION }}
94
- # push: true
95
- # tags: ${{ steps.meta.outputs.tags }}
96
- # labels: ${{ steps.meta.outputs.labels }}
97
- # platforms: linux/amd64,linux/arm64
98
- # cache-from: type=gha
99
- # cache-to: type=gha,mode=max
67
+ - name : Run GoReleaser (Snapshot)
68
+ uses : goreleaser/goreleaser-action@v6
69
+ if : inputs.snapshot || (!startsWith(github.ref, 'refs/tags/'))
70
+ with :
71
+ distribution : goreleaser
72
+ version : " ~> v2"
73
+ args : release --snapshot --clean
74
+ env :
75
+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
76
+ SOURCE_DATE_EPOCH : ${{ env.SOURCE_DATE_EPOCH }}
77
+ GPG_KEY_PATH : ${{ steps.import_gpg.outputs.keyid && format('/tmp/gpg-{0}.key', steps.import_gpg.outputs.keyid) || '' }}
78
+ NFPM_PASSPHRASE : ${{ secrets.GPG_PASSPHRASE }}
100
79
101
- # github-release:
102
- # runs-on: ubuntu-latest
103
- # steps:
104
- # - name: Checkout sources
105
- # uses: actions/checkout@v2
80
+ - name : Upload artifacts
81
+ uses : actions/upload-artifact@v4
82
+ with :
83
+ name : packages
84
+ path : |
85
+ dist/*.deb
86
+ dist/*.rpm
87
+ dist/*.tar.gz
88
+ dist/checksums.txt
89
+ retention-days : 30
90
+
91
+ - name : Test package installation
92
+ run : |
93
+ # Test Debian package installation
94
+ DEB_FILE=$(find dist -name "*httpserver*.deb" | head -1)
95
+ if [ -n "$DEB_FILE" ]; then
96
+ echo "Testing package installation: $DEB_FILE"
97
+ sudo dpkg -i "$DEB_FILE" || true
98
+ sudo apt-get -f install -y
99
+
100
+ # Test if binary is installed and working
101
+ /usr/bin/go-template-httpserver --help
102
+
103
+ # Test systemd service
104
+ sudo systemctl daemon-reload
105
+ sudo systemctl is-enabled go-template-httpserver
106
+
107
+ echo "✅ Package installation test passed"
108
+ else
109
+ echo "❌ No .deb file found for testing"
110
+ exit 1
111
+ fi
112
+
113
+ reproducibility-test :
114
+ runs-on : ubuntu-latest
115
+ needs : release
116
+ if : always()
117
+ steps :
118
+ - name : Checkout
119
+ uses : actions/checkout@v4
120
+ with :
121
+ fetch-depth : 0
106
122
107
- # - name: Create release
108
- # id: create_release
109
- # uses: actions/create-release@v1
110
- # env:
111
- # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
112
- # with:
113
- # tag_name: ${{ github.ref }}
114
- # release_name: ${{ github.ref }}
115
- # draft: false
116
- # prerelease: false
123
+ - name : Set up Go
124
+ uses : actions/setup-go@v5
125
+ with :
126
+ go-version : ' 1.24'
127
+ cache : true
128
+
129
+ - name : Set SOURCE_DATE_EPOCH for reproducible builds
130
+ run : echo "SOURCE_DATE_EPOCH=$(git log -1 --format=%ct)" >> $GITHUB_ENV
131
+
132
+ - name : Test reproducible builds
133
+ run : |
134
+ # Install GoReleaser
135
+ go install github.com/goreleaser/goreleaser/v2@latest
136
+
137
+ # Run reproducibility test
138
+ make package-test-reproducible
139
+
140
+ echo "✅ Reproducibility test passed"
141
+ env :
142
+ SOURCE_DATE_EPOCH : ${{ env.SOURCE_DATE_EPOCH }}
0 commit comments