Skip to content

Commit

Permalink
Merge pull request #123 from Expensify/andrew-shared-publish
Browse files Browse the repository at this point in the history
Use the shared publish workflow
  • Loading branch information
AndrewGable authored Oct 10, 2024
2 parents f55314a + e9e5a3b commit a66aed2
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 222 deletions.
Binary file removed .github/OSBotify-private-key.asc.gpg
Binary file not shown.
85 changes: 12 additions & 73 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ on:
concurrency: ${{ github.workflow }}

jobs:
version:
get_pull_request:
runs-on: ubuntu-latest

# OSBotify will update the version on `main`, so this check is important to prevent an infinite loop
if: ${{ github.actor != 'OSBotify' }}

outputs:
pull_request_number: ${{ steps.getMergedPullRequest.outputs.pull_request_number }}
steps:
- uses: actions/checkout@v3
with:
Expand All @@ -27,71 +25,12 @@ jobs:
with:
github_token: ${{ github.token }}

- name: Decrypt & Import OSBotify GPG key
run: |
cd .github
gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output OSBotify-private-key.asc OSBotify-private-key.asc.gpg
gpg --import OSBotify-private-key.asc
env:
LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}

- name: Set up git for OSBotify
run: |
git config --global user.signingkey AEE1036472A782AB
git config --global commit.gpgsign true
git config --global user.name OSBotify
git config --global user.email [email protected]
- uses: actions/setup-node@v3
with:
node-version: '16.x'
registry-url: 'https://registry.npmjs.org'

- name: Generate branch name
run: echo "BRANCH_NAME=OSBotify-bump-version-$(uuidgen)" >> $GITHUB_ENV

- name: Create branch for version-bump pull request
run: git checkout -b ${{ env.BRANCH_NAME }}

- name: Install npm packages
run: npm ci

- name: Update npm version
run: npm version patch

- name: Set new version in GitHub ENV
run: echo "NEW_VERSION=$(jq '.version' package.json)" >> $GITHUB_ENV

- name: Push branch and publish tags
run: git push --set-upstream origin ${{ env.BRANCH_NAME }} && git push --tags

- name: Create pull request
run: |
gh pr create \
--title "Update version to ${{ env.NEW_VERSION }}" \
--body "Update version to ${{ env.NEW_VERSION }}"
sleep 5
env:
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}

- name: Auto-approve pull request
run: gh pr review --approve ${{ env.BRANCH_NAME }}
env:
GITHUB_TOKEN: ${{ github.token }}

- name: Auto-merge pull request
run: gh pr merge --merge --delete-branch ${{ env.BRANCH_NAME }}
env:
GITHUB_TOKEN: ${{ github.token }}

- name: Publish to npm
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Comment on PR
run: |
gh pr comment ${{ steps.getMergedPullRequest.outputs.number }} --body \
":rocket: Published in ${{ env.NEW_VERSION }}"
env:
GITHUB_TOKEN: ${{ github.token }}
publish:
needs: get_pull_request
uses: Expensify/GitHub-Actions/.github/workflows/npmPublish.yml@main
with:
repository: ${{ github.action_repository }}
pull_request_number: ${{ needs.get_pull_request.outputs.pull_request_number }}
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
OS_BOTIFY_COMMIT_TOKEN: ${{ secrets.OS_BOTIFY_COMMIT_TOKEN }}
2 changes: 1 addition & 1 deletion eslint-plugin-expensify/CONST.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ module.exports = {
PREFER_TYPE_FEST_TUPLE_TO_UNION: 'Prefer using `TupleToUnion` from `type-fest` for converting tuple types to union types.',
PREFER_TYPE_FEST_VALUE_OF: 'Prefer using `ValueOf` from `type-fest` to extract the type of the properties of an object.',
PREFER_AT: 'Prefer using the `.at()` method for array element access.',
PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH: 'Prefer using `shouldUseNarrowLayout` instead of `isSmallScreenWidth` from `useResponsiveLayout`.',
PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH: 'Prefer using `shouldUseNarrowLayout` instead of `isSmallScreenWidth` from `useResponsiveLayout`.',
},
};
Original file line number Diff line number Diff line change
@@ -1,104 +1,104 @@
const {AST_NODE_TYPES} = require("@typescript-eslint/utils");
const _ = require("underscore");
const CONST = require("./CONST");
const {AST_NODE_TYPES} = require('@typescript-eslint/utils');
const _ = require('underscore');
const CONST = require('./CONST');

module.exports = {
meta: {
type: "problem",
docs: {
description:
"Warn against using isSmallScreenWidth from useResponsiveLayout and suggest using shouldUseNarrowLayout instead.",
meta: {
type: 'problem',
docs: {
description:
'Warn against using isSmallScreenWidth from useResponsiveLayout and suggest using shouldUseNarrowLayout instead.',
},
schema: [],
},
schema: [],
},
create(context) {
create(context) {
// eslint-disable-next-line es/no-nullish-coalescing-operators
const sourceCode = context.sourceCode ?? context.getSourceCode();

const sourceCode = context.sourceCode ?? context.getSourceCode();
return {
VariableDeclarator(node) {
if (
!node.init
|| !node.init.callee
|| node.init.callee.name !== 'useResponsiveLayout'
) {
return;
}

return {
VariableDeclarator(node) {
if (
!node.init ||
!node.init.callee ||
node.init.callee.name !== "useResponsiveLayout"
) {
return;
}

// Check for 'const {isSmallScreenWidth, ...} = useResponsiveLayout();' pattern
if (node.id.type === AST_NODE_TYPES.ObjectPattern) {
node.id.properties.forEach((property) => {
if (!property.key || property.key.name !== "isSmallScreenWidth") {
return;
}
context.report({
node: property,
message:
// Check for 'const {isSmallScreenWidth, ...} = useResponsiveLayout();' pattern
if (node.id.type === AST_NODE_TYPES.ObjectPattern) {
node.id.properties.forEach((property) => {
if (!property.key || property.key.name !== 'isSmallScreenWidth') {
return;
}
context.report({
node: property,
message:
CONST.MESSAGE
.PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH,
});
});
}
.PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH,
});
});
}

const scope = sourceCode.getScope ? sourceCode.getScope(node) : context.getScope();
const scope = sourceCode.getScope ? sourceCode.getScope(node) : context.getScope();

// Check for 'const var = useResponsiveLayout();' and use of this var
const variableName = node.id.name;
const variableUsages = _.filter(
scope.references,
(reference) => reference.identifier.name === variableName
);
variableUsages.forEach((usage) => {
const parent = usage.identifier.parent;
// Check for 'const var = useResponsiveLayout();' and use of this var
const variableName = node.id.name;
const variableUsages = _.filter(
scope.references,
reference => reference.identifier.name === variableName,
);
variableUsages.forEach((usage) => {
const parent = usage.identifier.parent;

// Check for 'const isSmallScreenWidth = var.isSmallScreenWidth;' pattern
if (
parent.type === AST_NODE_TYPES.MemberExpression &&
parent.property.name === "isSmallScreenWidth"
) {
context.report({
node: parent.property,
message:
// Check for 'const isSmallScreenWidth = var.isSmallScreenWidth;' pattern
if (
parent.type === AST_NODE_TYPES.MemberExpression
&& parent.property.name === 'isSmallScreenWidth'
) {
context.report({
node: parent.property,
message:
CONST.MESSAGE
.PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH,
});
}
.PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH,
});
}

// Check for 'const {isSmallScreenWidth} = var;' pattern
if (
parent.type === AST_NODE_TYPES.VariableDeclarator &&
parent.id.type === AST_NODE_TYPES.ObjectPattern
) {
parent.id.properties.forEach((property) => {
if (!property.key || property.key.name !== "isSmallScreenWidth") {
return;
}
context.report({
node: property,
message:
// Check for 'const {isSmallScreenWidth} = var;' pattern
if (
parent.type === AST_NODE_TYPES.VariableDeclarator
&& parent.id.type === AST_NODE_TYPES.ObjectPattern
) {
parent.id.properties.forEach((property) => {
if (!property.key || property.key.name !== 'isSmallScreenWidth') {
return;
}
context.report({
node: property,
message:
CONST.MESSAGE
.PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH,
});
});
}
});
},
MemberExpression(node) {
// Check for 'const isSmallScreenWidth = useResponsiveLayout().isSmallScreenWidth;' pattern
if (
node.object.type !== "CallExpression" ||
node.object.callee.name !== "useResponsiveLayout" ||
node.property.name !== "isSmallScreenWidth"
) {
return;
}
context.report({
node,
message:
.PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH,
});
});
}
});
},
MemberExpression(node) {
// Check for 'const isSmallScreenWidth = useResponsiveLayout().isSmallScreenWidth;' pattern
if (
node.object.type !== 'CallExpression'
|| node.object.callee.name !== 'useResponsiveLayout'
|| node.property.name !== 'isSmallScreenWidth'
) {
return;
}
context.report({
node,
message:
CONST.MESSAGE
.PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH,
});
},
};
},
.PREFER_SHOULD_USE_NARROW_LAYOUT_INSTEAD_OF_IS_SMALL_SCREEN_WIDTH,
});
},
};
},
};
Loading

0 comments on commit a66aed2

Please sign in to comment.