Skip to content

Commit 3e54024

Browse files
committed
feat: Detect shallow copies
Closes Detect shallow working copies & show useful error message #109.
1 parent c7bea87 commit 3e54024

File tree

3 files changed

+45
-25
lines changed

3 files changed

+45
-25
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ In your workflow file:
1717
steps:
1818
# This action requires an unshallow working copy,
1919
# so the following prerequisites are necessary:
20-
- uses: actions/[email protected]
21-
- run: git fetch --prune --unshallow
20+
- uses: actions/checkout@v3
21+
with:
22+
fetch-depth: 0
2223

2324
# Deploy your application
2425
- uses: 47ng/[email protected]

__tests__/main.test.ts

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ test('deploy default application (no arguments)', async () => {
1919
cleverCLI: 'clever'
2020
})
2121

22-
expect(exec).toHaveBeenNthCalledWith(1, 'clever', [
22+
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
2323
'login',
2424
'--token',
2525
'token',
2626
'--secret',
2727
'secret'
2828
])
29-
expect(exec).toHaveBeenNthCalledWith(2, 'clever', ['deploy'])
29+
expect(exec).toHaveBeenNthCalledWith(3, 'clever', ['deploy'])
3030
expect(core.setFailed).not.toHaveBeenCalled()
3131
})
3232

@@ -38,14 +38,14 @@ test('deploy application with alias', async () => {
3838
cleverCLI: 'clever'
3939
})
4040

41-
expect(exec).toHaveBeenNthCalledWith(1, 'clever', [
41+
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
4242
'login',
4343
'--token',
4444
'token',
4545
'--secret',
4646
'secret'
4747
])
48-
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
48+
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
4949
'deploy',
5050
'--alias',
5151
'app-alias'
@@ -60,20 +60,20 @@ test('deploy application with app ID', async () => {
6060
appID: 'app_facade42-cafe-babe-cafe-deadf00dbaad',
6161
cleverCLI: 'clever'
6262
})
63-
expect(exec).toHaveBeenNthCalledWith(1, 'clever', [
63+
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
6464
'login',
6565
'--token',
6666
'token',
6767
'--secret',
6868
'secret'
6969
])
70-
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
70+
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
7171
'link',
7272
'app_facade42-cafe-babe-cafe-deadf00dbaad',
7373
'--alias',
7474
'app_facade42-cafe-babe-cafe-deadf00dbaad'
7575
])
76-
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
76+
expect(exec).toHaveBeenNthCalledWith(4, 'clever', [
7777
'deploy',
7878
'--alias',
7979
'app_facade42-cafe-babe-cafe-deadf00dbaad'
@@ -88,20 +88,20 @@ test('when both app ID and alias are provided, appID takes precedence', async ()
8888
appID: 'app_facade42-cafe-babe-cafe-deadf00dbaad',
8989
cleverCLI: 'clever'
9090
})
91-
expect(exec).toHaveBeenNthCalledWith(1, 'clever', [
91+
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
9292
'login',
9393
'--token',
9494
'token',
9595
'--secret',
9696
'secret'
9797
])
98-
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
98+
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
9999
'link',
100100
'app_facade42-cafe-babe-cafe-deadf00dbaad',
101101
'--alias',
102102
'app_facade42-cafe-babe-cafe-deadf00dbaad'
103103
])
104-
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
104+
expect(exec).toHaveBeenNthCalledWith(4, 'clever', [
105105
'deploy',
106106
'--alias',
107107
'app_facade42-cafe-babe-cafe-deadf00dbaad'
@@ -118,26 +118,26 @@ test('passing extra env variables, using no input args', async () => {
118118
egg: 'spam'
119119
}
120120
})
121-
expect(exec).toHaveBeenNthCalledWith(1, 'clever', [
121+
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
122122
'login',
123123
'--token',
124124
'token',
125125
'--secret',
126126
'secret'
127127
])
128-
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
128+
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
129129
'env',
130130
'set',
131131
'foo',
132132
'bar'
133133
])
134-
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
134+
expect(exec).toHaveBeenNthCalledWith(4, 'clever', [
135135
'env',
136136
'set',
137137
'egg',
138138
'spam'
139139
])
140-
expect(exec).toHaveBeenNthCalledWith(4, 'clever', ['deploy'])
140+
expect(exec).toHaveBeenNthCalledWith(5, 'clever', ['deploy'])
141141
})
142142

143143
test('passing extra env variables, using appID', async () => {
@@ -151,36 +151,36 @@ test('passing extra env variables, using appID', async () => {
151151
egg: 'spam'
152152
}
153153
})
154-
expect(exec).toHaveBeenNthCalledWith(1, 'clever', [
154+
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
155155
'login',
156156
'--token',
157157
'token',
158158
'--secret',
159159
'secret'
160160
])
161-
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
161+
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
162162
'link',
163163
'app_facade42-cafe-babe-cafe-deadf00dbaad',
164164
'--alias',
165165
'app_facade42-cafe-babe-cafe-deadf00dbaad'
166166
])
167-
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
167+
expect(exec).toHaveBeenNthCalledWith(4, 'clever', [
168168
'env',
169169
'set',
170170
'--alias',
171171
'app_facade42-cafe-babe-cafe-deadf00dbaad',
172172
'foo',
173173
'bar'
174174
])
175-
expect(exec).toHaveBeenNthCalledWith(4, 'clever', [
175+
expect(exec).toHaveBeenNthCalledWith(5, 'clever', [
176176
'env',
177177
'set',
178178
'--alias',
179179
'app_facade42-cafe-babe-cafe-deadf00dbaad',
180180
'egg',
181181
'spam'
182182
])
183-
expect(exec).toHaveBeenNthCalledWith(5, 'clever', [
183+
expect(exec).toHaveBeenNthCalledWith(6, 'clever', [
184184
'deploy',
185185
'--alias',
186186
'app_facade42-cafe-babe-cafe-deadf00dbaad'
@@ -198,30 +198,30 @@ test('passing extra env variables, using alias only', async () => {
198198
egg: 'spam'
199199
}
200200
})
201-
expect(exec).toHaveBeenNthCalledWith(1, 'clever', [
201+
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
202202
'login',
203203
'--token',
204204
'token',
205205
'--secret',
206206
'secret'
207207
])
208-
expect(exec).toHaveBeenNthCalledWith(2, 'clever', [
208+
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
209209
'env',
210210
'set',
211211
'--alias',
212212
'foo',
213213
'foo',
214214
'bar'
215215
])
216-
expect(exec).toHaveBeenNthCalledWith(3, 'clever', [
216+
expect(exec).toHaveBeenNthCalledWith(4, 'clever', [
217217
'env',
218218
'set',
219219
'--alias',
220220
'foo',
221221
'egg',
222222
'spam'
223223
])
224-
expect(exec).toHaveBeenNthCalledWith(4, 'clever', [
224+
expect(exec).toHaveBeenNthCalledWith(5, 'clever', [
225225
'deploy',
226226
'--alias',
227227
'foo'

src/action.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,23 @@ export function processArguments(): Arguments {
7373
}
7474
}
7575

76+
async function checkForShallowCopy(): Promise<void> {
77+
let output = ''
78+
await exec('git', ['rev-parse', '--is-shallow-repository'], {
79+
listeners: {
80+
stdout: (data: Buffer) => (output += data.toString())
81+
}
82+
})
83+
if (output.trim() === 'true') {
84+
throw new Error(`This action requires an unshallow working copy.
85+
-> Use the following step before running this action:
86+
- uses: actions/checkout@v3
87+
with:
88+
fetch-depth: 0
89+
`)
90+
}
91+
}
92+
7693
export default async function run({
7794
token,
7895
secret,
@@ -83,6 +100,8 @@ export default async function run({
83100
extraEnv = {}
84101
}: Arguments): Promise<void> {
85102
try {
103+
await checkForShallowCopy()
104+
86105
core.debug(`Clever CLI path: ${cleverCLI}`)
87106

88107
// Authenticate (this will only store the credentials at a known location)

0 commit comments

Comments
 (0)