feat: implement cache-dependency-path option to control caching depen… · actions/setup-java@9eda6b5 (original) (raw)

`@@ -6,6 +6,7 @@ import * as fs from 'fs';

`

6

6

`import * as os from 'os';

`

7

7

`import * as core from '@actions/core';

`

8

8

`import * as cache from '@actions/cache';

`

``

9

`+

import * as glob from '@actions/glob';

`

9

10

``

10

11

`describe('dependency cache', () => {

`

11

12

`const ORIGINAL_RUNNER_OS = process.env['RUNNER_OS'];

`

`@@ -64,25 +65,30 @@ describe('dependency cache', () => {

`

64

65

`ReturnType,

`

65

66

`Parameters

`

66

67

`>;

`

``

68

`+

let spyGlobHashFiles: jest.SpyInstance<

`

``

69

`+

ReturnType,

`

``

70

`+

Parameters

`

``

71

`+

;

`

67

72

``

68

73

`beforeEach(() => {

`

69

74

`spyCacheRestore = jest

`

70

75

`.spyOn(cache, 'restoreCache')

`

71

76

`.mockImplementation((paths: string[], primaryKey: string) =>

`

72

77

`Promise.resolve(undefined)

`

73

78

`);

`

``

79

`+

spyGlobHashFiles = jest.spyOn(glob, 'hashFiles');

`

74

80

`spyWarning.mockImplementation(() => null);

`

75

81

`});

`

76

82

``

77

83

`it('throws error if unsupported package manager specified', () => {

`

78

``

`-

return expect(restore('ant')).rejects.toThrow(

`

``

84

`+

return expect(restore('ant', '')).rejects.toThrow(

`

79

85

`'unknown package manager specified: ant'

`

80

86

`);

`

81

87

`});

`

82

88

``

83

89

`describe('for maven', () => {

`

84

90

`it('throws error if no pom.xml found', async () => {

`

85

``

`-

await expect(restore('maven')).rejects.toThrow(

`

``

91

`+

await expect(restore('maven', '')).rejects.toThrow(

`

86

92

`` `No file in ${projectRoot(

``

87

93

`workspace

`

88

94

`` )} matched to [**/pom.xml], make sure you have checked out the target repository`

``

`@@ -91,15 +97,16 @@ describe('dependency cache', () => {

`

91

97

`it('downloads cache', async () => {

`

92

98

`createFile(join(workspace, 'pom.xml'));

`

93

99

``

94

``

`-

await restore('maven');

`

``

100

`+

await restore('maven', '');

`

95

101

`expect(spyCacheRestore).toHaveBeenCalled();

`

``

102

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith('**/pom.xml');

`

96

103

`expect(spyWarning).not.toHaveBeenCalled();

`

97

104

`expect(spyInfo).toHaveBeenCalledWith('maven cache is not found');

`

98

105

`});

`

99

106

`});

`

100

107

`describe('for gradle', () => {

`

101

108

`it('throws error if no build.gradle found', async () => {

`

102

``

`-

await expect(restore('gradle')).rejects.toThrow(

`

``

109

`+

await expect(restore('gradle', '')).rejects.toThrow(

`

103

110

`` `No file in ${projectRoot(

``

104

111

`workspace

`

105

112

`` )} matched to [/.gradle,/gradle-wrapper.properties,buildSrc//Versions.kt,buildSrc//Dependencies.kt,gradle/*.versions.toml,**/versions.properties], make sure you have checked out the target repository`

``

`@@ -108,41 +115,53 @@ describe('dependency cache', () => {

`

108

115

`it('downloads cache based on build.gradle', async () => {

`

109

116

`createFile(join(workspace, 'build.gradle'));

`

110

117

``

111

``

`-

await restore('gradle');

`

``

118

`+

await restore('gradle', '');

`

112

119

`expect(spyCacheRestore).toHaveBeenCalled();

`

``

120

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith(

`

``

121

`+

'/.gradle\n/gradle-wrapper.properties\nbuildSrc//Versions.kt\nbuildSrc//Dependencies.kt\ngradle/.versions.toml\n*/versions.properties'

`

``

122

`+

);

`

113

123

`expect(spyWarning).not.toHaveBeenCalled();

`

114

124

`expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

115

125

`});

`

116

126

`it('downloads cache based on build.gradle.kts', async () => {

`

117

127

`createFile(join(workspace, 'build.gradle.kts'));

`

118

128

``

119

``

`-

await restore('gradle');

`

``

129

`+

await restore('gradle', '');

`

120

130

`expect(spyCacheRestore).toHaveBeenCalled();

`

``

131

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith(

`

``

132

`+

'/.gradle\n/gradle-wrapper.properties\nbuildSrc//Versions.kt\nbuildSrc//Dependencies.kt\ngradle/.versions.toml\n*/versions.properties'

`

``

133

`+

);

`

121

134

`expect(spyWarning).not.toHaveBeenCalled();

`

122

135

`expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

123

136

`});

`

124

137

`it('downloads cache based on libs.versions.toml', async () => {

`

125

138

`createDirectory(join(workspace, 'gradle'));

`

126

139

`createFile(join(workspace, 'gradle', 'libs.versions.toml'));

`

127

140

``

128

``

`-

await restore('gradle');

`

``

141

`+

await restore('gradle', '');

`

129

142

`expect(spyCacheRestore).toHaveBeenCalled();

`

``

143

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith(

`

``

144

`+

'/.gradle\n/gradle-wrapper.properties\nbuildSrc//Versions.kt\nbuildSrc//Dependencies.kt\ngradle/.versions.toml\n*/versions.properties'

`

``

145

`+

);

`

130

146

`expect(spyWarning).not.toHaveBeenCalled();

`

131

147

`expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

132

148

`});

`

133

``

`-

});

`

134

``

`-

it('downloads cache based on buildSrc/Versions.kt', async () => {

`

135

``

`-

createDirectory(join(workspace, 'buildSrc'));

`

136

``

`-

createFile(join(workspace, 'buildSrc', 'Versions.kt'));

`

``

149

`+

it('downloads cache based on buildSrc/Versions.kt', async () => {

`

``

150

`+

createDirectory(join(workspace, 'buildSrc'));

`

``

151

`+

createFile(join(workspace, 'buildSrc', 'Versions.kt'));

`

137

152

``

138

``

`-

await restore('gradle');

`

139

``

`-

expect(spyCacheRestore).toHaveBeenCalled();

`

140

``

`-

expect(spyWarning).not.toHaveBeenCalled();

`

141

``

`-

expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

``

153

`+

await restore('gradle', '');

`

``

154

`+

expect(spyCacheRestore).toHaveBeenCalled();

`

``

155

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith(

`

``

156

`+

'/.gradle\n/gradle-wrapper.properties\nbuildSrc//Versions.kt\nbuildSrc//Dependencies.kt\ngradle/.versions.toml\n*/versions.properties'

`

``

157

`+

);

`

``

158

`+

expect(spyWarning).not.toHaveBeenCalled();

`

``

159

`+

expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

``

160

`+

});

`

142

161

`});

`

143

162

`describe('for sbt', () => {

`

144

163

`it('throws error if no build.sbt found', async () => {

`

145

``

`-

await expect(restore('sbt')).rejects.toThrow(

`

``

164

`+

await expect(restore('sbt', '')).rejects.toThrow(

`

146

165

`` `No file in ${projectRoot(

``

147

166

`workspace

`

148

167

`` )} matched to [/*.sbt,/project/build.properties,/project/.scala,/project/.sbt], make sure you have checked out the target repository`

``

`@@ -151,8 +170,11 @@ describe('dependency cache', () => {

`

151

170

`it('downloads cache', async () => {

`

152

171

`createFile(join(workspace, 'build.sbt'));

`

153

172

``

154

``

`-

await restore('sbt');

`

``

173

`+

await restore('sbt', '');

`

155

174

`expect(spyCacheRestore).toHaveBeenCalled();

`

``

175

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith(

`

``

176

`+

'/*.sbt\n/project/build.properties\n**/project/.scala\n/project/**.sbt'

`

``

177

`+

);

`

156

178

`expect(spyWarning).not.toHaveBeenCalled();

`

157

179

`expect(spyInfo).toHaveBeenCalledWith('sbt cache is not found');

`

158

180

`});

`

`@@ -161,19 +183,19 @@ describe('dependency cache', () => {

`

161

183

`createDirectory(join(workspace, 'project'));

`

162

184

`createFile(join(workspace, 'project/DependenciesV1.scala'));

`

163

185

``

164

``

`-

await restore('sbt');

`

``

186

`+

await restore('sbt', '');

`

165

187

`const firstCall = spySaveState.mock.calls.toString();

`

166

188

``

167

189

`spySaveState.mockClear();

`

168

``

`-

await restore('sbt');

`

``

190

`+

await restore('sbt', '');

`

169

191

`const secondCall = spySaveState.mock.calls.toString();

`

170

192

``

171

193

`// Make sure multiple restores produce the same cache

`

172

194

`expect(firstCall).toBe(secondCall);

`

173

195

``

174

196

`spySaveState.mockClear();

`

175

197

`createFile(join(workspace, 'project/DependenciesV2.scala'));

`

176

``

`-

await restore('sbt');

`

``

198

`+

await restore('sbt', '');

`

177

199

`const thirdCall = spySaveState.mock.calls.toString();

`

178

200

``

179

201

`expect(firstCall).not.toBe(thirdCall);

`

`@@ -182,11 +204,55 @@ describe('dependency cache', () => {

`

182

204

`it('downloads cache based on versions.properties', async () => {

`

183

205

`createFile(join(workspace, 'versions.properties'));

`

184

206

``

185

``

`-

await restore('gradle');

`

``

207

`+

await restore('gradle', '');

`

186

208

`expect(spyCacheRestore).toHaveBeenCalled();

`

``

209

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith(

`

``

210

`+

'/.gradle\n/gradle-wrapper.properties\nbuildSrc//Versions.kt\nbuildSrc//Dependencies.kt\ngradle/.versions.toml\n*/versions.properties'

`

``

211

`+

);

`

187

212

`expect(spyWarning).not.toHaveBeenCalled();

`

188

213

`expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

189

214

`});

`

``

215

`+

describe('cache-dependency-path', () => {

`

``

216

`+

it('throws error if no matching dependency file found', async () => {

`

``

217

`+

createFile(join(workspace, 'build.gradle.kts'));

`

``

218

`+

await expect(

`

``

219

`+

restore('gradle', 'sub-project/**/build.gradle.kts')

`

``

220

`+

).rejects.toThrow(

`

``

221

`` +

`No file in ${projectRoot(

``

``

222

`+

workspace

`

``

223

`` +

)} matched to [sub-project/**/build.gradle.kts], make sure you have checked out the target repository`

``

``

224

`+

);

`

``

225

`+

});

`

``

226

`+

it('downloads cache based on the specified pattern', async () => {

`

``

227

`+

createFile(join(workspace, 'build.gradle.kts'));

`

``

228

`+

createDirectory(join(workspace, 'sub-project1'));

`

``

229

`+

createFile(join(workspace, 'sub-project1', 'build.gradle.kts'));

`

``

230

`+

createDirectory(join(workspace, 'sub-project2'));

`

``

231

`+

createFile(join(workspace, 'sub-project2', 'build.gradle.kts'));

`

``

232

+

``

233

`+

await restore('gradle', 'build.gradle.kts');

`

``

234

`+

expect(spyCacheRestore).toHaveBeenCalled();

`

``

235

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith('build.gradle.kts');

`

``

236

`+

expect(spyWarning).not.toHaveBeenCalled();

`

``

237

`+

expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

``

238

+

``

239

`+

await restore('gradle', 'sub-project1/**/.gradle\n');

`

``

240

`+

expect(spyCacheRestore).toHaveBeenCalled();

`

``

241

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith(

`

``

242

`+

'sub-project1/**/.gradle'

`

``

243

`+

);

`

``

244

`+

expect(spyWarning).not.toHaveBeenCalled();

`

``

245

`+

expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

``

246

+

``

247

`+

await restore('gradle', '.gradle\nsub-project2/**/.gradle\n');

`

``

248

`+

expect(spyCacheRestore).toHaveBeenCalled();

`

``

249

`+

expect(spyGlobHashFiles).toHaveBeenCalledWith(

`

``

250

`+

'.gradle\nsub-project2/**/.gradle'

`

``

251

`+

);

`

``

252

`+

expect(spyWarning).not.toHaveBeenCalled();

`

``

253

`+

expect(spyInfo).toHaveBeenCalledWith('gradle cache is not found');

`

``

254

`+

});

`

``

255

`+

});

`

190

256

`});

`

191

257

`describe('save', () => {

`

192

258

`let spyCacheSave: jest.SpyInstance<

`