Skip to content

Lint PR

Lint PR #33123

Workflow file for this run

name: "Lint PR"
on:
pull_request:
types:
- opened
- edited
- synchronize
schedule:
- cron: "0 8 * * *"
permissions:
contents: read
actions: read
pull-requests: write
jobs:
pr-title:
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
steps:
# Please look up the latest version from
# https://github.com/amannn/action-semantic-pull-request/releases
- uses: amannn/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/github-script@v6
with:
script: |
const AZDO_TICKET_REGEX = 'https:\/\/(dev\.azure\.com\/msazure|msazure\.visualstudio\.com)\/Microsoft%20Teams%20Extensibility';
const AZDO_TICKET_REGEX_WXP = 'https:\/\/office\.visualstudio\.com\/OC';
const pullRequest = context.payload.pull_request;
if(pullRequest.title.startsWith("feat")) {
const body = pullRequest.body;
const match = body?.match(AZDO_TICKET_REGEX) || body?.match(AZDO_TICKET_REGEX_WXP);
if(!match) {
core.setFailed("Feat PR should contains AZDO tickets");
}
} else if(pullRequest.title.startsWith("fix")) {
const body = pullRequest.body;
const match = body?.match(AZDO_TICKET_REGEX) || body?.match(AZDO_TICKET_REGEX_WXP);
if(!match && !body) {
core.setFailed("Fix PR should contains AZDO tickets or descrptions");
}
}
check-format:
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
steps:
- name: Checkout branch
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: setup project
uses: ./.github/actions/setup-project
- name: prettier check files in PR on Fork
if: ${{ github.event.pull_request.head.repo.full_name != 'OfficeDev/TeamsFx' }}
run: |
git remote add upstream https://github.com/OfficeDev/TeamsFx.git
git fetch upstream ${{ github.event.pull_request.base.ref }}
VAR=$(realpath .github/scripts/lint-pr.sh)
pnpm -r exec -- bash $VAR upstream/${{ github.event.pull_request.base.ref }}
- name: prettier check files in PR on local
if: ${{ github.event.pull_request.head.repo.full_name == 'OfficeDev/TeamsFx' }}
run: |
VAR=$(realpath .github/scripts/lint-pr.sh)
pnpm -r exec -- bash $VAR origin/${{ github.event.pull_request.base.ref }}
- name: Check if there are changes
id: changes
run: |
git add .
VAR=$(git diff --cached --name-only)
if [ ! -z "$VAR" ]
then
echo $VAR
echo '======================================= Prompt Information ==============================================='
echo 'There may be some unformatted files in your PR, please run these commands on Git Bash terminal: '
echo '1. npm run setup'
echo '2. VAR=$(realpath .github/scripts/lint-pr.sh) '
echo '3. pnpm -r exec -- bash $VAR ${your-PR-target-branch}'
echo 'please replace the ${your-PR-target-branch} as the target branch of your PR, such as origin/dev or upstream/dev'
exit 1
fi
- name: Check unused strings
working-directory: ./packages/fx-core
run: npm run checkUnusedStrings
shell: bash
env:
CI: true
check-yaml-lint:
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
steps:
- name: Checkout branch
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Install Yaml lint and mustache
run: |
pip install yamllint
npm install mustache -g
echo "{}" > test.json
- name: check origin or remote
id: remote
run: |
if [ ${{ github.event.pull_request.head.repo.full_name == 'OfficeDev/TeamsFx' }} ]
then
echo "target=origin" >> $GITHUB_OUTPUT
else
echo "target=remote" >> $GITHUB_OUTPUT
fi
- name: check yaml lint origin
run: |
TRAGET=${{steps.remote.outputs.target}}/${{ github.event.pull_request.base.ref }}
YMLTPL=$(git diff --diff-filter=MARC $TRAGET...HEAD --name-only -- templates | grep -E '.yml.tpl$'|xargs)
echo $YMLTPL
if [ ! -z "$YMLTPL" ]
then
for obj in "$YMLTPL"
do
mustache test.json $obj | yamllint -d "{extends: relaxed, rules: {line-length: {max: 100}}}" -
done
fi
check-sensitive-content:
if: ${{ github.event_name == 'pull_request' || github.event_name == 'schedule' }}
runs-on: ubuntu-latest
steps:
- shell: bash
if: ${{ github.event_name == 'pull_request'}}
run: |
if [ "${{ github.event_name }}" == "push" ]; then
echo "depth=$(($(jq length <<< '${{ toJson(github.event.commits) }}') + 1))" >> $GITHUB_ENV
echo "branch=${{ github.ref_name }}" >> $GITHUB_ENV
fi
if [ "${{ github.event_name }}" == "pull_request" ]; then
echo "depth=$((${{ github.event.pull_request.commits }} + 1))" >> $GITHUB_ENV
echo "branch=${{ github.event.pull_request.head.ref }}" >> $GITHUB_ENV
fi
- uses: actions/checkout@v4
if: ${{ github.event_name == 'pull_request'}}
with:
ref: ${{env.branch}}
repository: ${{github.event.pull_request.head.repo.full_name}}
fetch-depth: ${{env.depth}}
- uses: trufflesecurity/trufflehog@main
if: ${{ github.event_name == 'pull_request'}}
with:
extra_args: --only-verified
- if: ${{ github.event_name == 'schedule' }}
uses: actions/checkout@v4
- if: ${{ github.event_name == 'schedule' }}
uses: trufflesecurity/trufflehog@main
with:
base: ""
head: ${{ github.ref_name }}
extra_args: --only-verified
attension-on-version:
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref == 'main' && github.event.action != 'edited' }}
runs-on: ubuntu-latest
steps:
- name: checkout branch
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ github.event.pull_request.head.ref }}
- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v7
- name: check origin or remote
id: remote
run: |
if [ ${{ github.event.pull_request.head.repo.full_name == 'OfficeDev/TeamsFx' }} ]
then
echo "target=origin" >> $GITHUB_OUTPUT
else
echo "target=remote" >> $GITHUB_OUTPUT
fi
- name: check feature history
id: description
shell: "/bin/bash {0}"
run: |
head=${{steps.remote.outputs.target}}/${{ github.event.pull_request.base.ref }}
echo $head
history_cli_feat=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/cli | grep "^feat")
echo $history_cli_feat
history_toolkit_feat=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/vscode-extension | grep "^feat")
echo $history_toolkit_feat
history_core_feat=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/fx-core | grep "^feat")
echo $history_core_feat
history_sdk_feat=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/sdk | grep "^feat")
echo $history_sdk_feat
history_sdk_react_feat=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/sdk-react | grep "^feat")
echo $history_sdk_react_feat
history_dotnet_sdk_feat=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/dotnet-sdk | grep "^feat")
echo $history_dotnet_sdk_feat
echo -e '\nFx-core feat commits:\n' "$history_core_feat" '\n\nCLI feat commits:\n' "$history_cli_feat" '\n\nExtension-toolkit feat commits:\n' "$history_toolkit_feat" '\n\nSDK feat commits:\n' "$history_sdk_feat" '\n\nSDK React feat commits:\n' "$history_sdk_react_feat" '\n\n.Net SDK feat commits:\n' "$history_dotnet_sdk_feat" '\n'> feat_history.txt
history_cli_fix=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/cli | grep "^fix")
echo $history_cli_fix
history_toolkit_fix=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/vscode-extension | grep "^fix")
echo $history_toolkit_fix
history_core_fix=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/fx-core | grep "^fix")
echo $history_core_fix
history_sdk_fix=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/sdk | grep "^fix")
echo $history_sdk_fix
history_sdk_react_feat=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/sdk-react | grep "^fix")
echo $history_sdk_react_fix
history_dotnet_sdk_feat=$(git log --pretty=format:"%s %h" $head...HEAD -- packages/dotnet-sdk | grep "^fix")
echo $history_dotnet_sdk_fix
echo -e '\nFx-core fix commits:\n' "$history_core_fix" '\n\nCLI fix commits:\n' "$history_cli_fix" '\n\nExtension-toolkit fix commits:\n' "$history_toolkit_fix" '\n\nSDK fix commits:\n' "$history_sdk_fix" '\n\nSDK React fix commits:\n' "$history_sdk_react_fix" '\n\n.Net SDK fix commits:\n' "$history_dotnet_sdk_fix" '\n'> fix_history.txt
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 14
- name: list history
if: ${{ github.event.pull_request.base.ref == 'main' }}
run: |
cat feat_history.txt > version_info.txt
cat fix_history.txt >> version_info.txt
- uses: JoseThen/[email protected]
with:
file_path: './version_info.txt'
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}