-
Notifications
You must be signed in to change notification settings - Fork 0
158 lines (150 loc) · 4.14 KB
/
argsh.yaml
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
147
148
149
150
151
152
153
154
155
156
157
158
name: argsh
on:
push:
branches:
- master
tags:
- "v*"
pull_request:
paths:
- '.bin/**'
- '.docker/**'
- 'libraries/**'
- 'test/**'
- '.envrc'
defaults:
run:
shell: bash -euo pipefail {0}
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Direnv
uses: HatsuneMiku3939/direnv-action@v1
- name: Lint
run: |
argsh lint
- name: Test
run: |
argsh test
coverage:
runs-on: ubuntu-latest
needs: [test]
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Direnv
uses: HatsuneMiku3939/direnv-action@v1
- name: Coverage
run: |
argsh coverage
- name: Is insync
run: |
git diff --exit-code \
--ignore-matching-lines '^ "date":'
minify:
runs-on: ubuntu-latest
needs: [coverage]
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Direnv
uses: HatsuneMiku3939/direnv-action@v1
- name: Build
run: |
argsh minify
- name: Lint
run: |
argsh lint -m
- name: Test
run: |
argsh test -m
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: argsh
if-no-files-found: error
retention-days: 7
path: |
argsh.min.sh
docker:
runs-on: ubuntu-latest
needs: [minify]
permissions:
packages: write
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Download executables
uses: actions/download-artifact@v4
with:
pattern: argsh
merge-multiple: true
path: .
- name: Executable
run: |
chmod +x argsh.min.sh
- name: Docker metadata
uses: docker/metadata-action@v5
id: metadata
with:
images: ghcr.io/${{ github.repository }}
tags: ${{ startsWith(github.ref, 'refs/tags/v')
&& format('type=match,pattern=v(.*),group=1,value={0}', github.ref_name)
|| 'type=sha,format=long' }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and release Docker image
uses: docker/build-push-action@v5
with:
context: .
push: ${{ startsWith(github.ref, 'refs/tags/v') }}
provenance: false
platforms: linux/amd64
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
release:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
environment: release
needs: [minify, docker]
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Download executables
uses: actions/download-artifact@v4
with:
pattern: argsh
merge-multiple: true
path: .
- name: Executable
run: |
chmod +x argsh.min.sh
- name: Upload release
env:
TAG_NAME: ${{ github.ref_name }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cp argsh.min.sh argsh
sha256sum argsh > sha256sum.txt
gh release create "${TAG_NAME}" --draft --title "argsh ${TAG_NAME}" --generate-notes
gh release upload "${TAG_NAME}" --clobber argsh sha256sum.txt
git config user.name 'github-actions[bot]'
git config user.email 'github-actions[bot]@users.noreply.github.com'
title="Release ${TAG_NAME}"
branch="release-${TAG_NAME}"
git add argsh.min.sh
git commit -m "${title}"
git push origin "HEAD:refs/heads/${branch}"
gh pr create --title "${title}" --body "" --head "${branch}"