mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Check generated proto files are as expected if any are modified in PRs (#6254)
This commit is contained in:
		
							
								
								
									
										81
									
								
								.github/workflows/ci-api-proto.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								.github/workflows/ci-api-proto.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | |||||||
|  | name: API Proto CI | ||||||
|  |  | ||||||
|  | # yamllint disable-line rule:truthy | ||||||
|  | on: | ||||||
|  |   pull_request: | ||||||
|  |     paths: | ||||||
|  |       - "esphome/components/api/api.proto" | ||||||
|  |       - "esphome/components/api/api_pb2.cpp" | ||||||
|  |       - "esphome/components/api/api_pb2.h" | ||||||
|  |       - "esphome/components/api/api_pb2_service.cpp" | ||||||
|  |       - "esphome/components/api/api_pb2_service.h" | ||||||
|  |       - "script/api_protobuf/api_protobuf.py" | ||||||
|  |       - ".github/workflows/ci-api-proto.yml" | ||||||
|  |  | ||||||
|  | permissions: | ||||||
|  |   contents: read | ||||||
|  |   pull-requests: write | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   check: | ||||||
|  |     name: Check generated files | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout | ||||||
|  |         uses: actions/checkout@v4.1.1 | ||||||
|  |       - name: Set up Python | ||||||
|  |         uses: actions/setup-python@v5.0.0 | ||||||
|  |         with: | ||||||
|  |           python-version: "3.11" | ||||||
|  |  | ||||||
|  |       - name: Install apt dependencies | ||||||
|  |         run: | | ||||||
|  |           sudo apt update | ||||||
|  |           sudo apt-cache show protobuf-compiler | ||||||
|  |           sudo apt install -y protobuf-compiler | ||||||
|  |           protoc --version | ||||||
|  |       - name: Install python dependencies | ||||||
|  |         run: pip install aioesphomeapi -c requirements.txt -r requirements_dev.txt | ||||||
|  |       - name: Generate files | ||||||
|  |         run: script/api_protobuf/api_protobuf.py | ||||||
|  |       - name: Check for changes | ||||||
|  |         run: | | ||||||
|  |           if ! git diff --quiet; then | ||||||
|  |             echo "## Job Failed" | tee -a $GITHUB_STEP_SUMMARY | ||||||
|  |             echo "You have altered the generated proto files but they do not match what is expected." | tee -a $GITHUB_STEP_SUMMARY | ||||||
|  |             echo "Please run 'script/api_protobuf/api_protobuf.py' and commit the changes." | tee -a $GITHUB_STEP_SUMMARY | ||||||
|  |             exit 1 | ||||||
|  |           fi | ||||||
|  |       - if: failure() | ||||||
|  |         name: Review PR | ||||||
|  |         uses: actions/github-script@v7.0.1 | ||||||
|  |         with: | ||||||
|  |           script: | | ||||||
|  |             await github.rest.pulls.createReview({ | ||||||
|  |               pull_number: context.issue.number, | ||||||
|  |               owner: context.repo.owner, | ||||||
|  |               repo: context.repo.repo, | ||||||
|  |               event: 'REQUEST_CHANGES', | ||||||
|  |               body: 'You have altered the generated proto files but they do not match what is expected.\nPlease run "script/api_protobuf/api_protobuf.py" and commit the changes.' | ||||||
|  |             }) | ||||||
|  |       - if: success() | ||||||
|  |         name: Dismiss review | ||||||
|  |         uses: actions/github-script@v7.0.1 | ||||||
|  |         with: | ||||||
|  |           script: | | ||||||
|  |             let reviews = await github.rest.pulls.listReviews({ | ||||||
|  |               pull_number: context.issue.number, | ||||||
|  |               owner: context.repo.owner, | ||||||
|  |               repo: context.repo.repo | ||||||
|  |             }); | ||||||
|  |             for (let review of reviews.data) { | ||||||
|  |               if (review.user.login === 'github-actions[bot]' && review.state === 'CHANGES_REQUESTED') { | ||||||
|  |                 await github.rest.pulls.dismissReview({ | ||||||
|  |                   pull_number: context.issue.number, | ||||||
|  |                   owner: context.repo.owner, | ||||||
|  |                   repo: context.repo.repo, | ||||||
|  |                   review_id: review.id, | ||||||
|  |                   message: 'Files now match the expected proto files.' | ||||||
|  |                 }); | ||||||
|  |               } | ||||||
|  |             } | ||||||
		Reference in New Issue
	
	Block a user