Skip to content

Commit

Permalink
Merge branch 'main' into audit/implementation/hasDraft-replacement
Browse files Browse the repository at this point in the history
  • Loading branch information
kacper-mikolajczak committed Apr 4, 2024
2 parents b52bb0b + 823e9c9 commit 564933c
Show file tree
Hide file tree
Showing 313 changed files with 7,865 additions and 23,843 deletions.
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
# Every PR gets a review from an internal Expensify engineer
* @Expensify/pullerbear

# Assign the Design team to review changes to our styles & assets
src/styles/ @Expensify/design @Expensify/pullerbear
assets/ @Expensify/design @Expensify/pullerbear
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import github from '@actions/github';
import * as github from '@actions/github';
import {parse} from '@babel/parser';
import traverse from '@babel/traverse';
import CONST from '@github/libs/CONST';
Expand Down
121 changes: 68 additions & 53 deletions .github/actions/javascript/authorChecklist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,6 @@
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({

/***/ 4097:
/***/ ((module) => {

const CONST = {
GITHUB_OWNER: 'Expensify',
APP_REPO: 'App',
APPLAUSE_BOT: 'applausebot',
OS_BOTIFY: 'OSBotify',
LABELS: {
STAGING_DEPLOY: 'StagingDeployCash',
DEPLOY_BLOCKER: 'DeployBlockerCash',
INTERNAL_QA: 'InternalQA',
},
DATE_FORMAT_STRING: 'yyyy-MM-dd',
};

CONST.APP_REPO_URL = `https://github.com/${CONST.GITHUB_OWNER}/${CONST.APP_REPO}`;
CONST.APP_REPO_GIT_URL = `[email protected]:${CONST.GITHUB_OWNER}/${CONST.APP_REPO}.git`;

module.exports = CONST;


/***/ }),

/***/ 7351:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

Expand Down Expand Up @@ -16617,7 +16593,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
const core = __importStar(__nccwpck_require__(2186));
const github = __importStar(__nccwpck_require__(5438));
const escapeRegExp_1 = __importDefault(__nccwpck_require__(8415));
const CONST_1 = __importDefault(__nccwpck_require__(4097));
const CONST_1 = __importDefault(__nccwpck_require__(9873));
const GithubUtils_1 = __importDefault(__nccwpck_require__(9296));
const newComponentCategory_1 = __importDefault(__nccwpck_require__(9032));
const pathToAuthorChecklist = `https://raw.githubusercontent.com/${CONST_1.default.GITHUB_OWNER}/${CONST_1.default.APP_REPO}/main/.github/PULL_REQUEST_TEMPLATE.md`;
Expand Down Expand Up @@ -16762,15 +16738,38 @@ exports["default"] = generateDynamicChecksAndCheckForCompletion;

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.detectReactComponent = void 0;
const github_1 = __importDefault(__nccwpck_require__(5438));
const github = __importStar(__nccwpck_require__(5438));
const parser_1 = __nccwpck_require__(5026);
const traverse_1 = __importDefault(__nccwpck_require__(1380));
const CONST_1 = __importDefault(__nccwpck_require__(4097));
const CONST_1 = __importDefault(__nccwpck_require__(9873));
const GithubUtils_1 = __importDefault(__nccwpck_require__(9296));
const promiseSome_1 = __importDefault(__nccwpck_require__(8534));
const items = [
Expand Down Expand Up @@ -16834,7 +16833,7 @@ async function detectReactComponentInFile(filename) {
owner: CONST_1.default.GITHUB_OWNER,
repo: CONST_1.default.APP_REPO,
path: filename,
ref: github_1.default.context.payload.pull_request?.head.ref,
ref: github.context.payload.pull_request?.head.ref,
};
try {
const { data } = await GithubUtils_1.default.octokit.repos.getContent(params);
Expand Down Expand Up @@ -16862,10 +16861,43 @@ const newComponentCategory = {
exports["default"] = newComponentCategory;


/***/ }),

/***/ 9873:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
const GITHUB_BASE_URL_REGEX = new RegExp('https?://(?:github\\.com|api\\.github\\.com)');
const GIT_CONST = {
GITHUB_OWNER: 'Expensify',
APP_REPO: 'App',
};
const CONST = {
...GIT_CONST,
APPLAUSE_BOT: 'applausebot',
OS_BOTIFY: 'OSBotify',
LABELS: {
STAGING_DEPLOY: 'StagingDeployCash',
DEPLOY_BLOCKER: 'DeployBlockerCash',
INTERNAL_QA: 'InternalQA',
},
DATE_FORMAT_STRING: 'yyyy-MM-dd',
PULL_REQUEST_REGEX: new RegExp(`${GITHUB_BASE_URL_REGEX.source}/.*/.*/pull/([0-9]+).*`),
ISSUE_REGEX: new RegExp(`${GITHUB_BASE_URL_REGEX.source}/.*/.*/issues/([0-9]+).*`),
ISSUE_OR_PULL_REQUEST_REGEX: new RegExp(`${GITHUB_BASE_URL_REGEX.source}/.*/.*/(?:pull|issues)/([0-9]+).*`),
POLL_RATE: 10000,
APP_REPO_URL: `https://github.com/${GIT_CONST.GITHUB_OWNER}/${GIT_CONST.APP_REPO}`,
APP_REPO_GIT_URL: `[email protected]:${GIT_CONST.GITHUB_OWNER}/${GIT_CONST.APP_REPO}.git`,
};
exports["default"] = CONST;


/***/ }),

/***/ 9296:
/***/ (function(module, exports, __nccwpck_require__) {
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {

"use strict";

Expand Down Expand Up @@ -16896,29 +16928,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.POLL_RATE = exports.ISSUE_OR_PULL_REQUEST_REGEX = void 0;
/* eslint-disable @typescript-eslint/naming-convention, import/no-import-module-exports */
const core = __importStar(__nccwpck_require__(2186));
const utils_1 = __nccwpck_require__(3030);
const plugin_paginate_rest_1 = __nccwpck_require__(4193);
const plugin_throttling_1 = __nccwpck_require__(9968);
const EmptyObject_1 = __nccwpck_require__(8227);
const arrayDifference_1 = __importDefault(__nccwpck_require__(7034));
const CONST_1 = __importDefault(__nccwpck_require__(4097));
const GITHUB_BASE_URL_REGEX = new RegExp('https?://(?:github\\.com|api\\.github\\.com)');
const PULL_REQUEST_REGEX = new RegExp(`${GITHUB_BASE_URL_REGEX.source}/.*/.*/pull/([0-9]+).*`);
const ISSUE_REGEX = new RegExp(`${GITHUB_BASE_URL_REGEX.source}/.*/.*/issues/([0-9]+).*`);
const ISSUE_OR_PULL_REQUEST_REGEX = new RegExp(`${GITHUB_BASE_URL_REGEX.source}/.*/.*/(?:pull|issues)/([0-9]+).*`);
exports.ISSUE_OR_PULL_REQUEST_REGEX = ISSUE_OR_PULL_REQUEST_REGEX;
/**
* The standard rate in ms at which we'll poll the GitHub API to check for status changes.
* It's 10 seconds :)
*/
const POLL_RATE = 10000;
exports.POLL_RATE = POLL_RATE;
const CONST_1 = __importDefault(__nccwpck_require__(9873));
class GithubUtils {
static internalOctokit;
static POLL_RATE;
/**
* Initialize internal octokit
*
Expand Down Expand Up @@ -17043,7 +17062,7 @@ class GithubUtils {
return [];
}
PRListSection = PRListSection[1];
const PRList = [...PRListSection.matchAll(new RegExp(`- \\[([ x])] (${PULL_REQUEST_REGEX.source})`, 'g'))].map((match) => ({
const PRList = [...PRListSection.matchAll(new RegExp(`- \\[([ x])] (${CONST_1.default.PULL_REQUEST_REGEX.source})`, 'g'))].map((match) => ({
url: match[2],
number: Number.parseInt(match[3], 10),
isVerified: match[1] === 'x',
Expand All @@ -17061,7 +17080,7 @@ class GithubUtils {
return [];
}
deployBlockerSection = deployBlockerSection[1];
const deployBlockers = [...deployBlockerSection.matchAll(new RegExp(`- \\[([ x])]\\s(${ISSUE_OR_PULL_REQUEST_REGEX.source})`, 'g'))].map((match) => ({
const deployBlockers = [...deployBlockerSection.matchAll(new RegExp(`- \\[([ x])]\\s(${CONST_1.default.ISSUE_OR_PULL_REQUEST_REGEX.source})`, 'g'))].map((match) => ({
url: match[2],
number: Number.parseInt(match[3], 10),
isResolved: match[1] === 'x',
Expand All @@ -17079,7 +17098,7 @@ class GithubUtils {
return [];
}
internalQASection = internalQASection[1];
const internalQAPRs = [...internalQASection.matchAll(new RegExp(`- \\[([ x])]\\s(${PULL_REQUEST_REGEX.source})`, 'g'))].map((match) => ({
const internalQAPRs = [...internalQASection.matchAll(new RegExp(`- \\[([ x])]\\s(${CONST_1.default.PULL_REQUEST_REGEX.source})`, 'g'))].map((match) => ({
url: match[2].split('-')[0].trim(),
number: Number.parseInt(match[3], 10),
isResolved: match[1] === 'x',
Expand Down Expand Up @@ -17250,7 +17269,6 @@ class GithubUtils {
* Generate the URL of an New Expensify pull request given the PR number.
*/
static getPullRequestURLFromNumber(value) {
// @ts-expect-error TODO: Remove this once CONST.js (https://github.com/Expensify/App/issues/25362) is migrated to TypeScript
return `${CONST_1.default.APP_REPO_URL}/pull/${value}`;
}
/**
Expand All @@ -17259,7 +17277,7 @@ class GithubUtils {
* @throws {Error} If the URL is not a valid Github Pull Request.
*/
static getPullRequestNumberFromURL(URL) {
const matches = URL.match(PULL_REQUEST_REGEX);
const matches = URL.match(CONST_1.default.PULL_REQUEST_REGEX);
if (!Array.isArray(matches) || matches.length !== 2) {
throw new Error(`Provided URL ${URL} is not a Github Pull Request!`);
}
Expand All @@ -17271,7 +17289,7 @@ class GithubUtils {
* @throws {Error} If the URL is not a valid Github Issue.
*/
static getIssueNumberFromURL(URL) {
const matches = URL.match(ISSUE_REGEX);
const matches = URL.match(CONST_1.default.ISSUE_REGEX);
if (!Array.isArray(matches) || matches.length !== 2) {
throw new Error(`Provided URL ${URL} is not a Github Issue!`);
}
Expand All @@ -17283,7 +17301,7 @@ class GithubUtils {
* @throws {Error} If the URL is not a valid Github Issue or Pull Request.
*/
static getIssueOrPullRequestNumberFromURL(URL) {
const matches = URL.match(ISSUE_OR_PULL_REQUEST_REGEX);
const matches = URL.match(CONST_1.default.ISSUE_OR_PULL_REQUEST_REGEX);
if (!Array.isArray(matches) || matches.length !== 2) {
throw new Error(`Provided URL ${URL} is not a valid Github Issue or Pull Request!`);
}
Expand Down Expand Up @@ -17311,9 +17329,6 @@ class GithubUtils {
}
}
exports["default"] = GithubUtils;
// This is a temporary solution to allow the use of the GithubUtils class in both TypeScript and JavaScript.
// Once all the files that import GithubUtils are migrated to TypeScript, this can be removed.
module.exports = GithubUtils;


/***/ }),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
const _ = require('underscore');
const lodashThrottle = require('lodash/throttle');
const CONST = require('../../../libs/CONST');
const ActionUtils = require('../../../libs/ActionUtils');
const GitHubUtils = require('../../../libs/GithubUtils');
const {promiseDoWhile} = require('../../../libs/promiseWhile');
/* eslint-disable @typescript-eslint/naming-convention */
import lodashThrottle from 'lodash/throttle';
import {getStringInput} from '@github/libs/ActionUtils';
import CONST from '@github/libs/CONST';
import GitHubUtils from '@github/libs/GithubUtils';
import {promiseDoWhile} from '@github/libs/promiseWhile';

type CurrentStagingDeploys = Awaited<ReturnType<typeof GitHubUtils.octokit.actions.listWorkflowRuns>>['data']['workflow_runs'];

function run() {
console.info('[awaitStagingDeploys] run()');
console.info('[awaitStagingDeploys] ActionUtils', ActionUtils);
console.info('[awaitStagingDeploys] getStringInput', getStringInput);
console.info('[awaitStagingDeploys] GitHubUtils', GitHubUtils);
console.info('[awaitStagingDeploys] promiseDoWhile', promiseDoWhile);

const tag = ActionUtils.getStringInput('TAG', {required: false});
const tag = getStringInput('TAG', {required: false});
console.info('[awaitStagingDeploys] run() tag', tag);

let currentStagingDeploys = [];
let currentStagingDeploys: CurrentStagingDeploys = [];

console.info('[awaitStagingDeploys] run() _.throttle', _.throttle);
console.info('[awaitStagingDeploys] run() _.throttle', lodashThrottle);

const throttleFunc = () =>
Promise.all([
Expand All @@ -39,29 +41,32 @@ function run() {
}),
])
.then((responses) => {
console.info('[awaitStagingDeploys] listWorkflowRuns responses', responses);
const workflowRuns = responses[0].data.workflow_runs;
if (!tag) {
if (!tag && typeof responses[1] === 'object') {
workflowRuns.push(...responses[1].data.workflow_runs);
}
console.info('[awaitStagingDeploys] workflowRuns', workflowRuns);
return workflowRuns;
})
.then((workflowRuns) => (currentStagingDeploys = _.filter(workflowRuns, (workflowRun) => workflowRun.status !== 'completed')))
.then(() =>
.then((workflowRuns) => (currentStagingDeploys = workflowRuns.filter((workflowRun) => workflowRun.status !== 'completed')))
.then(() => {
console.info('[awaitStagingDeploys] currentStagingDeploys', currentStagingDeploys);
console.log(
_.isEmpty(currentStagingDeploys)
!currentStagingDeploys.length
? 'No current staging deploys found'
: `Found ${currentStagingDeploys.length} staging deploy${currentStagingDeploys.length > 1 ? 's' : ''} still running...`,
),
);
);
});
console.info('[awaitStagingDeploys] run() throttleFunc', throttleFunc);

return promiseDoWhile(
() => !_.isEmpty(currentStagingDeploys),
() => !!currentStagingDeploys.length,
lodashThrottle(
throttleFunc,

// Poll every 60 seconds instead of every 10 seconds
GitHubUtils.POLL_RATE * 6,
CONST.POLL_RATE * 6,
),
);
}
Expand All @@ -70,4 +75,4 @@ if (require.main === module) {
run();
}

module.exports = run;
export default run;
Loading

0 comments on commit 564933c

Please sign in to comment.