mirror of
https://github.com/cypress-io/cypress.git
synced 2025-12-31 03:29:48 -06:00
169 lines
4.7 KiB
JavaScript
169 lines
4.7 KiB
JavaScript
const awspublish = require('gulp-awspublish')
|
|
const rename = require('gulp-rename')
|
|
const gulpDebug = require('gulp-debug')
|
|
let fs = require('fs-extra')
|
|
const path = require('path')
|
|
const gulp = require('gulp')
|
|
const Promise = require('bluebird')
|
|
const la = require('lazy-ass')
|
|
const check = require('check-more-types')
|
|
|
|
const uploadUtils = require('./util/upload')
|
|
|
|
fs = Promise.promisifyAll(fs)
|
|
|
|
// TODO: refactor this
|
|
// system expects desktop application to be inside a file
|
|
// with this name
|
|
const zipName = uploadUtils.S3Configuration.binaryZipName
|
|
|
|
module.exports = {
|
|
zipName,
|
|
|
|
async getPublisher () {
|
|
return uploadUtils.getPublisher()
|
|
},
|
|
|
|
// returns desktop folder for a given folder without platform
|
|
// something like desktop/0.20.1
|
|
getUploadVersionFolder (aws, version) {
|
|
la(check.unemptyString(aws.folder), 'aws object is missing desktop folder', aws.folder)
|
|
const dirName = [aws.folder, version].join('/')
|
|
|
|
return dirName
|
|
},
|
|
|
|
// store uploaded application in subfolders by version and platform
|
|
// something like desktop/0.20.1/darwin-x64/
|
|
getFullUploadPath (options) {
|
|
let { folder, version, platformArch, name } = options
|
|
|
|
if (!folder) {
|
|
folder = uploadUtils.S3Configuration.releaseFolder
|
|
}
|
|
|
|
la(check.unemptyString(folder), 'missing folder', options)
|
|
la(check.semver(version), 'missing or invalid version', options)
|
|
la(check.unemptyString(name), 'missing file name', options)
|
|
la(uploadUtils.isValidPlatformArch(platformArch),
|
|
'invalid platform and arch', platformArch)
|
|
|
|
const fileName = [folder, version, platformArch, name].join('/')
|
|
|
|
return fileName
|
|
},
|
|
|
|
getManifestUrl (folder, version, uploadOsName) {
|
|
const url = uploadUtils.getUploadUrl()
|
|
|
|
la(check.url(url), 'could not get upload url', url)
|
|
|
|
return {
|
|
url: [url, folder, version, uploadOsName, zipName].join('/'),
|
|
}
|
|
},
|
|
|
|
getRemoteManifest (folder, version) {
|
|
la(check.unemptyString(folder), 'missing manifest folder', folder)
|
|
la(check.semver(version), 'invalid manifest version', version)
|
|
|
|
const getUrl = this.getManifestUrl.bind(null, folder, version)
|
|
|
|
return {
|
|
name: 'Cypress',
|
|
version,
|
|
packages: {
|
|
// keep these for compatibility purposes
|
|
// although they are now deprecated
|
|
mac: getUrl('darwin-x64'),
|
|
linux64: getUrl('linux-x64'),
|
|
|
|
// start adding the new ones
|
|
// using node's platform
|
|
darwin: getUrl('darwin-x64'),
|
|
linux: getUrl('linux-x64'),
|
|
|
|
// the new-new names that use platform and arch as is
|
|
'darwin-x64': getUrl('darwin-x64'),
|
|
'darwin-arm64': getUrl('darwin-arm64'),
|
|
'linux-x64': getUrl('linux-x64'),
|
|
'linux-arm64': getUrl('linux-arm64'),
|
|
'win32-x64': getUrl('win32-x64'),
|
|
},
|
|
}
|
|
},
|
|
|
|
createRemoteManifest (folder, version) {
|
|
const obj = this.getRemoteManifest(folder, version)
|
|
|
|
const src = path.resolve('manifest.json')
|
|
|
|
return fs.outputJsonAsync(src, obj).return(src)
|
|
},
|
|
|
|
s3Manifest (version) {
|
|
return this.getPublisher()
|
|
.then((publisher) => {
|
|
const { releaseFolder } = uploadUtils.S3Configuration
|
|
|
|
const headers = {
|
|
'Cache-Control': 'no-cache',
|
|
}
|
|
let manifest = null
|
|
|
|
return new Promise((resolve, reject) => {
|
|
return this.createRemoteManifest(releaseFolder, version)
|
|
.then((src) => {
|
|
manifest = src
|
|
|
|
return gulp.src(src)
|
|
.pipe(rename((p) => {
|
|
p.dirname = `${releaseFolder}/${p.dirname}`
|
|
|
|
return p
|
|
})).pipe(gulpDebug())
|
|
.pipe(publisher.publish(headers))
|
|
.pipe(awspublish.reporter())
|
|
.on('error', reject)
|
|
.on('end', resolve)
|
|
})
|
|
}).finally(() => {
|
|
return fs.removeAsync(manifest)
|
|
})
|
|
})
|
|
},
|
|
|
|
toS3 ({ file, uploadPath }) {
|
|
console.log('#uploadToS3 ⏳')
|
|
console.log('uploading', file, 'to', uploadPath)
|
|
|
|
la(check.unemptyString(file), 'missing file to upload', file)
|
|
la(fs.existsSync(file), 'cannot find file', file)
|
|
la(check.extension(path.extname(uploadPath))(file),
|
|
'invalid file to upload extension', file)
|
|
|
|
return this.getPublisher()
|
|
.then((publisher) => {
|
|
const headers = {
|
|
'Cache-Control': 'no-cache',
|
|
}
|
|
|
|
return new Promise((resolve, reject) => {
|
|
return gulp.src(file)
|
|
.pipe(rename((p) => {
|
|
// rename to standard filename for upload
|
|
p.basename = path.basename(uploadPath, path.extname(uploadPath))
|
|
p.dirname = path.dirname(uploadPath)
|
|
|
|
return p
|
|
}))
|
|
.pipe(gulpDebug())
|
|
.pipe(publisher.publish(headers))
|
|
.pipe(awspublish.reporter())
|
|
.on('error', reject)
|
|
.on('end', resolve)
|
|
})
|
|
})
|
|
},
|
|
}
|