Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move to default branch #7231

Draft
wants to merge 12 commits into
base: master
Choose a base branch
from
64 changes: 11 additions & 53 deletions cli/cli.ts
Expand Up @@ -400,18 +400,18 @@ function ciAsync() {
fs.writeFileSync(npmrc, cfg)
}

const latest = branch == "master" ? "latest" : "git-" + branch
// upload locs on build on master
const masterOrReleaseBranchRx = /^(master|v\d+\.\d+\.\d+)$/;
const apiStringBranchRx = pxt.appTarget.uploadApiStringsBranchRx
? new RegExp(pxt.appTarget.uploadApiStringsBranchRx)
: masterOrReleaseBranchRx;
const defaultBranch = pxt.github.isDefaultBranch(branch)
const latest = defaultBranch ? "latest" : "git-" + branch
// upload locs on build on default or releases
const apiStringBranchRx: (t: string) => boolean = ((t:string) => new RegExp(pxt.appTarget.uploadApiStringsBranchRx).test(t))
Copy link
Member

@jwunderl jwunderl May 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const apiStringBranchRx: (t: string) => boolean = ((t:string) => new RegExp(pxt.appTarget.uploadApiStringsBranchRx).test(t))
const apiStringBranchRx: (t: string) => boolean = ((t: string) => new RegExp(pxt.appTarget.uploadApiStringsBranchRx).test(t))

to make the linter happy

? ((t: string) => new RegExp(pxt.appTarget.uploadApiStringsBranchRx).test(t))
: ((t: string) => pxt.github.isDefaultOrReleaseBranch(t));
const uploadDocs = !pullRequest
&& !!pxt.appTarget.uploadDocs
&& masterOrReleaseBranchRx.test(branch);
&& pxt.github.isDefaultOrReleaseBranch(branch);
const uploadApiStrings = !pullRequest
&& (!!pxt.appTarget.uploadDocs || pxt.appTarget.uploadApiStringsBranchRx)
&& apiStringBranchRx.test(branch);
&& apiStringBranchRx(branch);

pxt.log(`tag: ${tag}`);
pxt.log(`branch: ${branch}`);
Expand All @@ -432,7 +432,7 @@ function ciAsync() {
.then(isTaggedCommit => {
pxt.log(`is tagged commit: ${isTaggedCommit}`);
let p = npmPublishAsync();
if (branch === "master" && isTaggedCommit) {
if (defaultBranch && isTaggedCommit) {
if (uploadDocs)
p = p
.then(() => buildWebStringsAsync())
Expand Down Expand Up @@ -1588,14 +1588,14 @@ function ciBuildInfo(): CiBuildInfo {

pxt.log(`event name: ${eventName}`);

// PR: not on master or not a release number
// PR: not on default or not a release number
return {
ci: "githubactions",
branch,
tag,
commit,
commitUrl: "https://github.com/" + repoSlug + "/commits/" + commit,
pullRequest: !(branch == "master" || /^v\d+\.\d+\.\d+$/.test(tag))
pullRequest: !pxt.github.isDefaultOrReleaseBranch(branch)
}
}
}
Expand Down Expand Up @@ -5027,32 +5027,6 @@ function writeProjects(prjs: SavedProject[], outDir: string): string[] {
return dirs;
}

function cherryPickAsync(parsed: commandParser.ParsedCommand) {
const commit = parsed.args[0];
const name = parsed.flags["name"] || commit.slice(0, 7);
let majorVersion = parseInt(pxtVersion().split('.')[0]);
const gitAsync = (args: string[]) => nodeutil.spawnAsync({
cmd: "git",
args
})

let branches: string[] = [];
for (let i = majorVersion - 1; i >= 0; --i) branches.push("v" + i);
pxt.log(`cherry picking ${commit} into ${branches.join(', ')}`)

let p = gitAsync(["pull"]);
branches.forEach(branch => {
const pr = `cp/${branch}${name}`;
p = p.then(() => gitAsync(["checkout", branch]))
.then(() => gitAsync(["pull"]))
.then(() => gitAsync(["checkout", "-b", pr]))
.then(() => gitAsync(["cherry-pick", commit]))
.then(() => gitAsync(["push", "--set-upstream", "origin", pr]));
})

return p.catch(() => gitAsync(["checkout", "master"]));
}

function checkDocsAsync(parsed?: commandParser.ParsedCommand): Promise<void> {
return internalCheckDocsAsync(
true,
Expand Down Expand Up @@ -5555,7 +5529,6 @@ function testGithubPackagesAsync(parsed: commandParser.ParsedCommand): Promise<v
let tag = pxt.semver.sortLatestTags(tags)[0];
if (!tag) {
reportWarning({ repo: fullname, title: "create a release", body: "You need to create a release in this repository. Follow the instructions at https://makecode.com/extensions/versioning." });
tag = "master";
}
else {
reportLog(` release: ${tag}`)
Expand Down Expand Up @@ -6156,21 +6129,6 @@ ${pxt.crowdin.KEY_VARIABLE} - crowdin key
}
}, c => pyconv.convertAsync(c.args, !!c.flags["internal"]))

p.defineCommand({
name: "cherrypick",
aliases: ["cp"],
help: "recursively cherrypicks and push branches",
argString: "<commit>",
advanced: true,
flags: {
"name": {
description: "name of the branch",
type: "string",
argument: "name"
}
}
}, cherryPickAsync);

p.defineCommand({
name: "decompile",
help: "decompile typescript files",
Expand Down
4 changes: 2 additions & 2 deletions docs/github-explorer.html
Expand Up @@ -131,7 +131,7 @@
login
}
nameWithOwner
object(expression: "master:pxt.json") {
object(expression: "HEAD:pxt.json") {
... on Blob {
text
}
Expand Down Expand Up @@ -239,7 +239,7 @@

const url = targets[repo.target].url +
`?nocookiebanner=1&${readOnly ? 'controller=1&readonly=1&ws=mem&' : 'editorLayout=ide&nosandbox=1'}#pub:github:`
+ repo.nameWithOwner + "#master";
+ repo.nameWithOwner;
$("#makecodecolumn").attr("src", url);
})

Expand Down
4 changes: 2 additions & 2 deletions localtypings/pxtarget.d.ts
Expand Up @@ -63,7 +63,7 @@ declare namespace pxt {
compileService?: TargetCompileService;
ignoreDocsErrors?: boolean;
uploadApiStringsBranchRx?: string; // regular expression to match branches that should upload api strings
uploadDocs?: boolean; // enable uploading to crowdin on master or v* builds
uploadDocs?: boolean; // enable uploading to crowdin on default branch or v* builds
variants?: Map<AppTarget>; // patches on top of the current AppTarget for different chip variants
multiVariants?: string[];
alwaysMultiVariant?: boolean;
Expand Down Expand Up @@ -210,7 +210,7 @@ declare namespace pxt {
codalTarget?: string | {
name: string; // "codal-arduino-uno"
url: string; // "https://github.com/lancaster-university/codal-arduino-uno"
branch: string; // "master"
branch: string; // "main"
type: string; // "git"
branches?: pxt.Map<string>; // overrides repo url -> commit sha
};
Expand Down
2 changes: 1 addition & 1 deletion pxtlib/browserutils.ts
Expand Up @@ -665,7 +665,7 @@ namespace pxt.BrowserUtils {
class MemTranslationDb implements ITranslationDb {
translations: pxt.Map<ITranslationDbEntry> = {};
key(lang: string, filename: string, branch: string) {
return `${lang}|${filename}|${branch || "master"}`;
return `${lang}|${filename}|${branch || "default"}`;
}
get(lang: string, filename: string, branch: string): ITranslationDbEntry {
return this.translations[this.key(lang, filename, branch)];
Expand Down
2 changes: 1 addition & 1 deletion pxtlib/docsrender.ts
Expand Up @@ -531,7 +531,7 @@ namespace pxt.docs {
if (opts.repo)
markdown += `
\`\`\`package
${opts.repo.name.replace(/^pxt-/, '')}=github:${opts.repo.fullName}#${opts.repo.tag || "master"}
${opts.repo.name.replace(/^pxt-/, '')}=github:${opts.repo.fullName}${opts.repo.tag ? `#${opts.repo.tag}` : ""}
\`\`\`
`;

Expand Down
12 changes: 11 additions & 1 deletion pxtlib/github.ts
Expand Up @@ -613,7 +613,7 @@ namespace pxt.github {
forks: number;
open_issues: number;
watchers: number;
default_branch: string; // "master",
default_branch: string;
score: number; // 6.7371006

// non-github, added to track search request
Expand Down Expand Up @@ -651,6 +651,16 @@ namespace pxt.github {
fork?: boolean;
}

export function isDefaultBranch(branch: string, repo?: GitRepo) {
if (repo && repo.defaultBranch)
return branch === repo.defaultBranch;
return /^(main|master)$/.test(branch);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dubious...

}

export function isDefaultOrReleaseBranch(branch: string, repo?: GitRepo) {
return isDefaultBranch(branch) || /^v\d+\.\d+\.\d+$/.test(branch);
}

export function listUserReposAsync(): Promise<GitRepo[]> {
const q = `{
viewer {
Expand Down
4 changes: 2 additions & 2 deletions webapp/src/db.ts
Expand Up @@ -120,7 +120,7 @@ class GithubDb implements pxt.github.IGithubDb {

loadConfigAsync(repopath: string, tag: string): Promise<pxt.PackageConfig> {
// don't cache master
if (tag == "master")
if (pxt.github.isDefaultBranch(tag))
return this.mem.loadConfigAsync(repopath, tag);

const id = `config-${repopath}-${tag}`;
Expand All @@ -144,7 +144,7 @@ class GithubDb implements pxt.github.IGithubDb {
loadPackageAsync(repopath: string, tag: string): Promise<pxt.github.CachedPackage> {
tag = tag || "master";
// don't cache master
if (tag == "master")
if (pxt.github.isDefaultBranch(tag))
return this.mem.loadPackageAsync(repopath, tag);

const id = `pkg-${repopath}-${tag}`;
Expand Down
2 changes: 1 addition & 1 deletion webapp/src/package.ts
Expand Up @@ -786,7 +786,7 @@ data.mountVirtualApi("pkg-git-pr", {
const ghid = f.getPkgId() == "this" && header && header.githubId;
if (!ghid) return Promise.resolve(missing);
const parsed = pxt.github.parseRepoId(ghid);
if (!parsed || !parsed.tag || parsed.tag == "master") return Promise.resolve(missing);
if (!parsed || !parsed.tag || pxt.github.isDefaultBranch(parsed.tag)) return Promise.resolve(missing);
return pxt.github.findPRNumberforBranchAsync(parsed.fullName, parsed.tag)
.catch(e => missing);
},
Expand Down
4 changes: 2 additions & 2 deletions webapp/src/workspace.ts
Expand Up @@ -548,7 +548,7 @@ export async function prAsync(hd: Header, commitId: string, msg: string) {
const branchName = await pxt.github.getNewBranchNameAsync(parsed.fullName, "merge-")
await pxt.github.createNewBranchAsync(parsed.fullName, branchName, commitId)
const url = await pxt.github.createPRFromBranchAsync(parsed.fullName, parsed.tag, branchName, msg)
// force user back to master - we will instruct them to merge PR in github.com website
// force user back to default branch - we will instruct them to merge PR in github.com website
// and sync here to get the changes
let headCommit = await pxt.github.getRefAsync(parsed.fullName, parsed.tag)
await githubUpdateToAsync(hd, {
Expand Down Expand Up @@ -638,7 +638,7 @@ export async function commitAsync(hd: Header, options: CommitOptions = {}) {
// add compiled javascript to be run in github pages
if (pxt.appTarget.appTheme.githubCompiledJs
&& options.binaryJs
&& (!parsed.tag || parsed.tag == "master")) {
&& (!parsed.tag || pxt.github.isDefaultBranch(parsed.tag))) {
const v = cfg.version || "0.0.0";
const opts: compiler.CompileOptions = {
jsMetaVersion: v
Expand Down