mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-02 18:51:34 +03:00
feat: read from LICENSE file
This commit is contained in:
parent
14efc18eca
commit
4568f80f2e
@ -1,11 +1,9 @@
|
||||
import * as fs from "fs"
|
||||
import toml from "toml"
|
||||
import { schemeMeta } from "./colorSchemes"
|
||||
import { Meta, Verification } from "./themes/common/colorScheme"
|
||||
import https from "https"
|
||||
import crypto from "crypto"
|
||||
import { MetaAndLicense } from "./themes/common/colorScheme"
|
||||
|
||||
const accepted_licenses_file = `${__dirname}/../../script/licenses/zed-licenses.toml`
|
||||
const ACCEPTED_LICENSES_FILE = `${__dirname}/../../script/licenses/zed-licenses.toml`
|
||||
|
||||
// Use the cargo-about configuration file as the source of truth for supported licenses.
|
||||
function parseAcceptedToml(file: string): string[] {
|
||||
@ -20,8 +18,11 @@ function parseAcceptedToml(file: string): string[] {
|
||||
return obj.accepted
|
||||
}
|
||||
|
||||
function checkLicenses(schemeMeta: Meta[], licenses: string[]) {
|
||||
for (let meta of schemeMeta) {
|
||||
function checkLicenses(
|
||||
schemeMetaWithLicense: MetaAndLicense[],
|
||||
licenses: string[]
|
||||
) {
|
||||
for (const { meta } of schemeMetaWithLicense) {
|
||||
// FIXME: Add support for conjuctions and conditions
|
||||
if (licenses.indexOf(meta.license.SPDX) < 0) {
|
||||
throw Error(
|
||||
@ -31,62 +32,23 @@ function checkLicenses(schemeMeta: Meta[], licenses: string[]) {
|
||||
}
|
||||
}
|
||||
|
||||
function getLicenseText(
|
||||
schemeMeta: Meta[],
|
||||
callback: (meta: Meta, license_text: string) => void
|
||||
) {
|
||||
for (let meta of schemeMeta) {
|
||||
if (typeof meta.license.license_text == "string") {
|
||||
callback(meta, meta.license.license_text)
|
||||
} else {
|
||||
let license_text_obj: Verification = meta.license.license_text
|
||||
// The following copied from the example code on nodejs.org:
|
||||
// https://nodejs.org/api/http.html#httpgetoptions-callback
|
||||
https
|
||||
.get(license_text_obj.https_url, (res) => {
|
||||
const { statusCode } = res
|
||||
|
||||
if (statusCode < 200 || statusCode >= 300) {
|
||||
throw new Error(
|
||||
`Failed to fetch license for: ${meta.name}, Status Code: ${statusCode}`
|
||||
)
|
||||
}
|
||||
|
||||
res.setEncoding("utf8")
|
||||
let rawData = ""
|
||||
res.on("data", (chunk) => {
|
||||
rawData += chunk
|
||||
})
|
||||
res.on("end", () => {
|
||||
const hash = crypto
|
||||
.createHash("sha256")
|
||||
.update(rawData)
|
||||
.digest("hex")
|
||||
if (license_text_obj.license_checksum == hash) {
|
||||
callback(meta, rawData)
|
||||
} else {
|
||||
throw Error(
|
||||
`Checksum for ${meta.name} did not match file downloaded from ${license_text_obj.https_url}`
|
||||
)
|
||||
}
|
||||
})
|
||||
})
|
||||
.on("error", (e) => {
|
||||
throw e
|
||||
})
|
||||
}
|
||||
function generateLicenseFile(schemeMetaWithLicense: MetaAndLicense[]) {
|
||||
for (const { meta, licenseFile } of schemeMetaWithLicense) {
|
||||
const licenseText = fs.readFileSync(licenseFile).toString()
|
||||
writeLicense(meta.name, meta.url, licenseText)
|
||||
}
|
||||
}
|
||||
|
||||
function writeLicense(schemeMeta: Meta, text: String) {
|
||||
function writeLicense(
|
||||
themeName: string,
|
||||
themeUrl: string,
|
||||
licenseText: String
|
||||
) {
|
||||
process.stdout.write(
|
||||
`## [${schemeMeta.name}](${schemeMeta.url})\n\n${text}\n********************************************************************************\n\n`
|
||||
`## [${themeName}](${themeUrl})\n\n${licenseText}\n********************************************************************************\n\n`
|
||||
)
|
||||
}
|
||||
|
||||
const accepted_licenses = parseAcceptedToml(accepted_licenses_file)
|
||||
checkLicenses(schemeMeta, accepted_licenses)
|
||||
|
||||
getLicenseText(schemeMeta, (meta, text) => {
|
||||
writeLicense(meta, text)
|
||||
})
|
||||
const acceptedLicenses = parseAcceptedToml(ACCEPTED_LICENSES_FILE)
|
||||
checkLicenses(schemeMeta, acceptedLicenses)
|
||||
generateLicenseFile(schemeMeta)
|
||||
|
Loading…
Reference in New Issue
Block a user