Skip to content

Commit

Permalink
Deliver stable releases if newer than latest prerelease depending on …
Browse files Browse the repository at this point in the history
…settings
  • Loading branch information
safinn committed Oct 16, 2017
1 parent e7d1d75 commit af965b4
Showing 1 changed file with 72 additions and 22 deletions.
94 changes: 72 additions & 22 deletions lib/cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const convertStream = require('stream-to-string')
const checkPlatform = require('./platform')

const latest = {}
const { ACCOUNT, REPOSITORY, PRE } = process.env
const { ACCOUNT, REPOSITORY, PRE, ONLY_PRE } = process.env

if (!ACCOUNT || !REPOSITORY) {
console.error('Neither ACCOUNT, nor REPOSITORY are defined')
Expand Down Expand Up @@ -42,31 +42,20 @@ const cacheReleaseList = async url => {
latest.files.RELEASES = content
}

exports.refreshCache = async () => {
const repo = ACCOUNT + '/' + REPOSITORY
const url = `https://api.github.com/repos/${repo}/releases?per_page=100`

const response = await fetch(url, {
headers: {
Accept: 'application/vnd.github.preview'
}
})

if (response.status !== 200) {
return
}
const compareReleases = (stableRelease, preRelease) => {
const stableVersion = new Date(stableRelease.published_at)
const preReleaseVersion = new Date(preRelease.published_at)

const data = await response.json()

if (!Array.isArray(data) || data.length === 0) {
return
}
return stableVersion >= preReleaseVersion ? stableRelease : preRelease
}

const release = data.find(item => {
const isPre = Boolean(PRE) === Boolean(item.prerelease)
return !item.draft && isPre
const checkReleases = (...releases) => {
return releases.filter(release => {
return release && release.assets && Array.isArray(release.assets)
})
}

const cacheRelease = async release => {
if (!release || !release.assets || !Array.isArray(release.assets)) {
return
}
Expand Down Expand Up @@ -107,6 +96,67 @@ exports.refreshCache = async () => {
console.log(`Finished caching version ${tag_name}`)
}

exports.refreshCache = async () => {
const repo = ACCOUNT + '/' + REPOSITORY
const url = `https://api.github.com/repos/${repo}/releases?per_page=100`

const response = await fetch(url, {
headers: {
Accept: 'application/vnd.github.preview'
}
})

if (response.status !== 200) {
return
}

const data = await response.json()

if (!Array.isArray(data) || data.length === 0) {
return
}

// If we want to include pre-releases
if (PRE) {
// Find latest pre-release
const preRelease = data.find(item => {
return !item.draft && item.prerelease
})

// If ONLY_PRE enviroment variable is true, cache the pre-release
if (ONLY_PRE) {
return cacheRelease(preRelease)
}

// Find latest stable release
const stableRelease = data.find(item => {
return !item.draft && !item.prerelease
})

// Get array of legit releases (latest stable and latest pre-release)
const releases = checkReleases(stableRelease, preRelease)

switch (releases.length) {
case 1:
cacheRelease(releases[0])
return
case 2: {
const latestRelease = compareReleases(stableRelease, preRelease)
cacheRelease(latestRelease)
return
}
default:
return
}
}

const release = data.find(item => {
return !item.draft && !item.prerelease
})

cacheRelease(release)
}

// This is a method returning the cache
// because the cache would otherwise be loaded
// only once when the index file is parsed
Expand Down

0 comments on commit af965b4

Please sign in to comment.