PHP의 팩스를 테스트할 필요가 있는지 판단하는 동작을 만들었습니다.

의 목적


팩스로 보내면 코드 스타일을 수정하거나 주석을 수정할 수 있습니다.
이러한 변경은 PHP의 동작에 아무런 영향을 미치지 않지만, 변경된 이상 실제 동작에 영향을 미치지 않는지 테스트를 하지 않으면 불안하다.(사실 아무런 영향이 없다. 흔히 있는 일이라 유감이다.)
그러나 영향 범위가 워낙 넓어 인력 테스트가 어렵고 원래 영향 범위를 모르는 경우도 있다.
자동 테스트가 충실하면 인력으로 테스트를 하지 않을 수도 있다고 판단할 수 있지만 전체 프로젝트를 완전히 망라하는 프로젝트는 많지 않다고 생각합니다.
그렇다면 동작에 영향을 미치지 않는다는 것을 보증할 수 있다면 어떨까요?
동작에 영향을 주지 않는다면 직접 발표해도 문제없다.
https://tech-blog.monotaro.com/entry/2018/09/26/142451
이 기사에서 우리는 추상적인 문법목(AST:Abstract Syntax Tree)의 변경으로 인해 동작에 영향을 주지 않을 것을 보증합니다.
액션에 영향을 미치지 않는 테스트를 했다고 할 수도 있다.
재밌어서 기릿허브 액션스로 가볍게 동작을 실행해봤다.

PHP 아니에요.


https://qiita.com/tetsunosukeito/items/c0e99a120414de226480
PHPnikic/php-ast를 사용하면AST를 획득할 수 있습니다.
베이스, 헤드는 각각의 지점으로 아스트의 해시 값을 구하고 비교한다.
세부 코드

분기 표준에 따라 경로를 똑똑히 찾다


https://github.com/snow-actions/php-ast-changed/blob/e2d4f0192b13f7fb41c63a859966e43c4b74fe9e/action.yml#L28-L49

아스트의 해시치를 따로따로 구하다


https://github.com/snow-actions/php-ast-changed/blob/e2d4f0192b13f7fb41c63a859966e43c4b74fe9e/action.yml#L51-L67

AST 해시 값을 구하는 스크립트


https://github.com/snow-actions/php-ast-changed/blob/e2d4f0192b13f7fb41c63a859966e43c4b74fe9e/php-ast-hashes.php

비교


https://github.com/snow-actions/php-ast-changed/blob/e2d4f0192b13f7fb41c63a859966e43c4b74fe9e/action.yml#L69-L77

작성된 작업


https://github.com/marketplace/actions/php-ast-changed

사용법

pull_request 또는 pull_request_target 이벤트에 사용됩니다.${{ steps.<step-id>.outputs.changed }} 반환"true" 또는 "false".는 문자열입니다."false"라면 AST가 변경되지 않았기 때문テスト不要이기 때문에 라벨을 붙일 수 있을 것 같아요.
미리 라벨을 만들어야 해요.
.github/workflows/php-ast-changed.yml
name: PHP AST Changed

on:
  pull_request:
    paths:
      - '**.php'

  label-if-not-changed:
    runs-on: ubuntu-20.04
    timeout-minutes: 30

    steps:
      - uses: snow-actions/php-ast-[email protected]
        id: php-ast
      - name: Label
        run: |
          set -x
          label='テスト不要'
          if [ "${changed}" = 'false' ]; then
            gh pr edit ${pr_number} --add-label ${label}
          else
            gh pr edit ${pr_number} --remove-label ${label}
          fi
        env:
          GH_TOKEN: ${{ github.token }}
          pr_number: ${{ github.event.number }}
          changed: ${{ steps.php-ast.outputs.changed }}

작업 템플릿 만들기


https://zenn.dev/snowcait/articles/787e83640746e1
예전에 만든 이걸 사용했어요.

좋은 웹페이지 즐겨찾기