-
Notifications
You must be signed in to change notification settings - Fork 2k
146 lines (127 loc) · 4.86 KB
/
nightly.yml
File metadata and controls
146 lines (127 loc) · 4.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
name: nightly
on:
schedule:
- cron: "0 2 * * *"
workflow_dispatch:
permissions:
contents: write
packages: write
jobs:
check:
runs-on: ubuntu-latest
outputs:
skip: ${{ steps.check_changes.outputs.skip }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Check for changes since last nightly release
id: check_changes
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
LAST_NIGHTLY_SHA=$(gh release view nightly --json targetCommitish -q '.targetCommitish' 2>/dev/null || echo "")
CURRENT_SHA=$(git rev-parse HEAD)
echo "Last nightly SHA: $LAST_NIGHTLY_SHA"
echo "Current SHA: $CURRENT_SHA"
if [ -n "$LAST_NIGHTLY_SHA" ] && [ "$LAST_NIGHTLY_SHA" = "$CURRENT_SHA" ]; then
echo "No changes since last nightly build, skipping ..."
echo "skip=true" >> $GITHUB_OUTPUT
else
echo "Changes detected, proceeding with build ..."
echo "skip=false" >> $GITHUB_OUTPUT
fi
nightly:
needs: check
if: needs.check.outputs.skip != 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.26.1"
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Delete existing nightly release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release delete nightly --yes --cleanup-tag 2>/dev/null || true
- name: Set nightly date
id: tag
run: |
NIGHTLY_DATE=$(date -u +%Y-%m-%d)
echo "date=$NIGHTLY_DATE" >> $GITHUB_OUTPUT
- name: Prepare dependencies
run: make dist
env:
LISTMONK_VERSION: nightly-${{ steps.tag.outputs.date }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
version: latest
args: release --snapshot --parallelism 1 --clean --config .goreleaser-nightly.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
LISTMONK_VERSION: nightly-${{ steps.tag.outputs.date }}
- name: Push Docker images
run: |
# Push all architecture-specific images
docker push listmonk/listmonk:nightly-amd64
docker push listmonk/listmonk:nightly-arm64v8
docker push listmonk/listmonk:nightly-armv6
docker push listmonk/listmonk:nightly-armv7
docker push ghcr.io/knadh/listmonk:nightly-amd64
docker push ghcr.io/knadh/listmonk:nightly-arm64v8
docker push ghcr.io/knadh/listmonk:nightly-armv6
docker push ghcr.io/knadh/listmonk:nightly-armv7
- name: Create and push Docker manifests
run: |
# Docker Hub manifest
docker buildx imagetools create -t listmonk/listmonk:nightly \
listmonk/listmonk:nightly-amd64 \
listmonk/listmonk:nightly-arm64v8 \
listmonk/listmonk:nightly-armv6 \
listmonk/listmonk:nightly-armv7
# GHCR manifest
docker buildx imagetools create -t ghcr.io/knadh/listmonk:nightly \
ghcr.io/knadh/listmonk:nightly-amd64 \
ghcr.io/knadh/listmonk:nightly-arm64v8 \
ghcr.io/knadh/listmonk:nightly-armv6 \
ghcr.io/knadh/listmonk:nightly-armv7
- name: Verify Docker manifests
run: |
docker buildx imagetools inspect listmonk/listmonk:nightly
docker buildx imagetools inspect ghcr.io/knadh/listmonk:nightly
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create nightly \
--title "Nightly release" \
--notes "
> **Warning**: This is an automated nightly build from the master branch.
> It may contain bugs and breaking changes. Use at your own risk.
> Available on Docker Hub and GitHub Container Registry as `listmonk/listmonk:nightly`.
> For stable releases, please use a versioned release. [Learn more](https://listmonk.app/docs/installation/#nightly)
Built from commit: $(git rev-parse --short HEAD)" \
--prerelease \
--target $(git rev-parse HEAD) \
dist/*.tar.gz