Skip to content

Commit

Permalink
Rewrite Safari script (#21325)
Browse files Browse the repository at this point in the history
* Rewrite Safari script

* Skip iOS 12.1, 13.1, 14.1
  • Loading branch information
Elchi3 authored Nov 28, 2023
1 parent b9f2fbb commit c5e7654
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 107 deletions.
2 changes: 2 additions & 0 deletions scripts/update-browser-releases/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ const options = {
browserName: 'Safari for Desktop',
bcdFile: './browsers/safari.json',
bcdBrowserName: 'safari',
skippedReleases: [],
releaseNoteJSON:
'https://developer.apple.com/tutorials/data/documentation/safari-release-notes.json',
releaseNoteURLBase: 'https://developer.apple.com',
Expand All @@ -175,6 +176,7 @@ const options = {
browserName: 'Safari for iOS',
bcdFile: './browsers/safari_ios.json',
bcdBrowserName: 'safari_ios',
skippedReleases: ['12.1', '13.1', '14.1'],
releaseNoteJSON:
'https://developer.apple.com/tutorials/data/documentation/safari-release-notes.json',
releaseNoteURLBase: 'https://developer.apple.com',
Expand Down
159 changes: 53 additions & 106 deletions scripts/update-browser-releases/safari.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { newBrowserEntry, updateBrowserEntry } from './utils.js';

/**
* extractReleaseData - Extract release info from string given by Apple
* @param {string} str The string with release inforormation
* @param {string} str The string with release information
* E.g., Released September 18, 2023 — Version 17 (19616.1.27)
* @returns {object} Data for the release
*/
Expand All @@ -29,15 +29,15 @@ const extractReleaseData = (str) => {
return {
date: new Date(`${result[1]} UTC`).toISOString().substring(0, 10),
version: result[2],
beta: Boolean(result[3]),
engine: result[4].substring(2),
channel: result[3] ? 'beta' : 'retired',
engineVersion: result[4].substring(2),
releaseNote: '',
};
};

/**
* updateSafariFile - Update the json file listing the browser version of a safari entry
* @param {object} options The list of options for this type of chromiums.
* @param {object} options The list of options for this type of Safari.
* @returns {string} The log of what has been generated (empty if nothing)
*/
export const updateSafariReleases = async (options) => {
Expand All @@ -59,21 +59,20 @@ export const updateSafariReleases = async (options) => {
return '';
}
const safariRelease = JSON.parse(await releaseNoteFile.text());
const releases = safariRelease['references'];

//
// Compute stable and beta release number
// Collect release data from JSON
//
let stableRelease;
let betaRelease;

const releases = safariRelease['references'];
const releaseData = [];
for (const id in releases) {
// Filter out data from "Technologies" overview page
if (releases[id].kind !== 'article') {
continue;
}
const releaseData = extractReleaseData(releases[id].abstract[0].text);
const releaseDataEntry = extractReleaseData(releases[id].abstract[0].text);

if (!releaseData) {
if (!releaseDataEntry) {
console.warn(
chalk`{yellow Release string from Apple not understandable (${releases[id].abstract[0].text})}`,
);
Expand All @@ -82,117 +81,65 @@ export const updateSafariReleases = async (options) => {

// Compute release note
if (releases[id].url) {
releaseData.releaseNote = `${options.releaseNoteURLBase}${releases[id].url}`;
releaseDataEntry.releaseNote = `${options.releaseNoteURLBase}${releases[id].url}`;
} else {
releaseData.releaseNote = '';
releaseDataEntry.releaseNote = '';
}

if (releaseData.beta) {
betaRelease = releaseData;
} else if (!stableRelease || releaseData.version > stableRelease.version) {
stableRelease = releaseData;
} else {
// Check old engine value (should not change, but let's check)
if (
!(
releaseData.version in
safariBCD.browsers[options.bcdBrowserName].releases
)
) {
if (Number(releaseData.version) > 15) {
// We know that version past Safari 15 matches iOS versions too
console.warn(
chalk`{yellow Old version ${releaseData.version} not found in BCD file}`,
);
}
continue;
}
const engineStored =
safariBCD.browsers[options.bcdBrowserName].releases[releaseData.version]
.engine_version;
if (releaseData.engine !== engineStored) {
// Differs!
console.warn(
chalk`{yellow Engine for ${releaseData.version} (${releaseData.engine}) doesn't match engine stored (${engineStored})}`,
);
}
// Don't use the date for beta, we only record release dates, not beta dates
if (releaseDataEntry.channel === 'beta') {
releaseDataEntry.date = '';
}
}

//
// Update stable release
//
if (
safariBCD.browsers[options.bcdBrowserName].releases[stableRelease.version]
) {
result += updateBrowserEntry(
safariBCD,
options.bcdBrowserName,
stableRelease.version,
stableRelease.date,
'current',
stableRelease.releaseNote,
stableRelease.engineVersion,
);
} else {
result += newBrowserEntry(
safariBCD,
options.bcdBrowserName,
stableRelease.version,
'current',
'WebKit',
stableRelease.date,
stableRelease.releaseNote,
stableRelease.engineVersion,
);
releaseData.push(releaseDataEntry);
}

//
// Update beta release
// Find current release
//
if (
safariBCD.browsers[options.bcdBrowserName].releases[betaRelease.version]
) {
result += updateBrowserEntry(
safariBCD,
options.bcdBrowserName,
betaRelease.version,
'',
'beta',
'',
'',
);
} else {
result += newBrowserEntry(
safariBCD,
options.bcdBrowserName,
betaRelease.version,
'beta',
'WebKit',
'',
stableRelease.releaseNote,
'',
);
}
const dates = [];
releaseData.forEach((release) => {
if (release.channel !== 'beta') {
dates.push(release.date);
}
});
const currentDate = dates.sort().pop();
releaseData.forEach((release) => {
if (release.date === currentDate) {
release.channel = 'current';
}
});

//
// Replace all old entries with 'retired'
// Update from releaseData object to BCD
//
Object.entries(safariBCD.browsers[options.bcdBrowserName].releases).forEach(
([key, entry]) => {
if (parseFloat(key) < stableRelease) {
releaseData.forEach((release) => {
if (!options.skippedReleases.includes(release.version)) {
if (
safariBCD.browsers[options.bcdBrowserName].releases[release.version]
) {
result += updateBrowserEntry(
safariBCD,
options.bcdBrowserName,
key,
entry['release_date'],
'retired',
'',
'',
release.version,
release.date,
release.channel,
release.releaseNote,
release.engineVersion,
);
} else {
result += newBrowserEntry(
safariBCD,
options.bcdBrowserName,
release.version,
release.channel,
'WebKit',
release.date,
release.releaseNote,
release.engineVersion,
);
}
},
);
}
});

//
// Write the update browser's json to file
Expand Down
2 changes: 1 addition & 1 deletion scripts/update-browser-releases/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ export const updateBrowserEntry = (

if (engineVersion && entry['engine_version'] != engineVersion) {
result += chalk`{cyan \n- New engine version for {bold ${browser} ${version}}: {bold ${engineVersion}}, previously ${entry['engine_version']}.}`;
entry['engineVersion'] = engineVersion;
entry['engine_version'] = engineVersion;
}

return result;
Expand Down

0 comments on commit c5e7654

Please sign in to comment.