αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž‡αžΆαžšαžΏαž™αŸ—αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαžŸαžΆαž„αžŸαž„αŸ‹αž”αŸ†αž–αž„αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αžŸαžΆαž„αžŸαž„αŸ‹αž“αŸ…αž€αŸ„αŸ‡αž‡αŸ’αžœαžΆαŸ” αž–αŸαž›αžαŸ’αž›αŸ‡αžœαžΆαž‡αžΆαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž–αŸαž›αžαŸ’αž›αŸ‡αžœαžΆαž˜αž·αž“αž˜αŸ‚αž“αž‘αŸαŸ” αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž–αŸ’αž™αžΆαž™αžΆαž˜αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžƒαŸ’αž›αžΆαŸ†αž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž˜αž½αž™αž…αŸ†αž“αž½αž“αž–αžΈ Travis-CI αž“αž·αž„ TeamCity αž‘αŸ… GitHub Actions αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž…αŸαž‰αž–αžΈαžœαžΆαŸ”

αžαžΎαž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·?

αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž…αžΌαžšαž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΌαž…αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ Spring boot / Java 11 / Maven αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αž»αŸ†αžœαž·αž‰αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ REST API αžŸαžΆαž˜αž‰αŸ’αž‰αž“αžΉαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž”αŸ’αžšαž—αž–αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ– github.com/antkorwin/github-actions αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž†αŸ’αž›αž»αŸ‡αž”αž‰αŸ’αž…αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αŸ”

JIRA αž“αž·αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž•αŸ‚αž“αž€αžΆαžš

αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž“αž·αž™αžΆαž™αžαžΆαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž™αžΎαž„αž”αŸ’αžšαžΎ JIRA αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž˜αžŠαžΆαž“αž”αž‰αŸ’αž αžΆ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαžΌαž˜αž”αž„αŸ’αž€αžΎαžαž”αž“αŸ’αž‘αŸ‡αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡ αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αž”αž‰αŸ’αž αžΆαžŠαŸ†αž”αžΌαž„αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αŸ–

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž”αž“αŸ’αžαž·αž…αž‘αŸ€αžαž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŠαŸ‚αž› JIRA αž“αž·αž„ GitHub αž’αžΆαž…αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαŸ”

αž™αžΎαž„αž’αŸ’αžœαžΎαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„

αž‚αž˜αŸ’αžšαŸ„αž„αžŸαžΆαž€αž›αŸ’αž”αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αžαžΆαž˜αžšαž™αŸˆ maven αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžœαžΆαž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αžŽαžΆαžŸαŸ‹ αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‚αžΊαž€αž‰αŸ’αž…αž”αŸ‹ mvn clean αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎ Github Actions αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŠαŸ‚αž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„ αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžš yml αž’αž˜αŸ’αž˜αžαžΆ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αž“αž·αž™αžΆαž™αžαžΆαžαŸ’αž‰αž»αŸ†αž…αžΌαž›αž…αž·αžαŸ’αž "αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ yml" αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΎαž™αžΎαž„αž’αžΆαž…αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž”αžΆαž“ - αž™αžΎαž„αž’αŸ’αžœαžΎαžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ .github/ directory workflow/ file build.yml αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαžŸαžΆαžαžΆαž˜αŸαŸ–

name: Build

on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Package
        run: mvn -B clean package -DskipTests

on β€” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αž›αžΎαŸ– pull_request/push β€” αž”αž„αŸ’αž αžΆαž‰αžαžΆαž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžšαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαžαŸ‚αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž‡αŸ†αžšαž»αž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž…αŸ†αž–αŸ„αŸ‡αž˜αŸ αž“αž·αž„αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ”

αžαžΆαž„β€‹αž€αŸ’αžšαŸ„αž˜β€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž–αž·αž–αžŽαŸŒαž“αžΆβ€‹αž’αŸ†αž–αžΈβ€‹αž—αžΆαžšαž€αž·αž…αŸ’αž… (αž€αžΆαžšαž„αžΆαžš) αž“αž·αž„β€‹αž‡αŸ†αž αžΆαž“β€‹αž’αž“αž»αžœαžαŸ’αž (αž‡αŸ†αž αžΆαž“) αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αžΈαž˜αž½αž™αŸ—αŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš - αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ OS αž‚αŸ„αž›αžŠαŸ… αž‚αž½αžšαž±αŸ’αž™αž—αŸ’αž‰αžΆαž€αŸ‹αž•αŸ’αž’αžΎαž› αž’αŸ’αž“αž€αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž’αžΆαž…αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Mac OS αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž›αžΎαžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαžŽαžΆαžŸαŸ‹ (αž”αžΎαž’αŸ€αž”αž“αžΉαž„αž›αžΈαž“αž»αž…)αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž§αž‘αžΆαž αžšαžŽαŸ αžŠαŸ„αž™αž”αŸ’αžšαžΎ actions/setup-java action αž™αžΎαž„αžŠαŸ†αž‘αžΎαž„αž”αžšαž·αžŸαŸ’αžαžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Java 11αŸ”

αžŠαŸ„αž™αž˜αžΆαž“αž‡αŸ†αž“αž½αž™αž–αžΈ αž‡αžΆαž˜αž½αž™ αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšβ€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž…αžΆαž”αŸ‹β€‹αž•αŸ’αžŠαžΎαž˜β€‹αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– αžŸαŸ†αžαžΆαž“αŸ‹β€‹αž‘αžΆαŸ†αž„β€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹β€‹αžŠαŸ‚αž›β€‹αž“αžΉαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αž‰αŸ’αž‡αžΌαž“β€‹αž‘αŸ…β€‹αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αŸ”

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αŸ…αžŸαŸαžŸαžŸαž›αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αž˜αŸ’αžšαŸ„αž„αžŸαžΆαž„αžŸαž„αŸ‹αž‡αžΆαž˜αž½αž™ MavenαŸ– run: mvn -B clean package αž‘αž„αŸ‹ -B αž“αž·αž™αžΆαž™αžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžšαž”αŸ€αž”αž˜αž·αž“αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžŠαžΌαž…αŸ’αž“αŸαŸ‡ maven αž—αŸ’αž›αžΆαž˜αŸ—αž˜αž·αž“αž…αž„αŸ‹αžŸαž½αžšαž™αžΎαž„αž’αŸ’αžœαžΈαž˜αž½αž™

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™! αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αžαžΆαŸ†αž„αž…αž·αžαŸ’αžαž‡αžΆαž˜αž½αž™αž˜αŸ αž€αžΆαžšαž€αžŸαžΆαž„αž‚αž˜αŸ’αžšαŸ„αž„αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·

αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž‚αžΊαž›αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αž αž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αž’αžΆαž…αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžŠαŸ„αž™αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαž’αŸ’αžœαžΎαž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž˜αžΎαž›αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ PR - αž’αŸ’αž“αž€αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž”αžΆαž“αž€αž“αŸ’αž›αž„αž•αž»αžαž‘αŸ… αž αžΎαž™αž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž—αŸ’αž›αŸαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαžΆαžαžΆαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž˜αž»αž“αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸ„αŸ‡αž‘αŸαŸ”

αž™αžΎαž„β€‹αž“αžΉαž„β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž€αžΆαžšβ€‹αžŸαžΆαž€αž›αŸ’αž”αž„β€‹αž“αŸ…αž–αŸαž›β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžŸαŸ†αžŽαžΎβ€‹αž‘αžΆαž‰ αž“αž·αž„β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‘αŸ…αž€αŸ’αž“αž»αž„β€‹αž˜αŸ αž αžΎαž™β€‹αž“αŸ…αž–αŸαž›β€‹αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆβ€‹αž“αŸ„αŸ‡β€‹αž™αžΎαž„β€‹αž“αžΉαž„β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžβ€‹αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸβ€‹αžŸαŸ’αžαžΈαž–αžΈβ€‹αž€αžΆαžšαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹β€‹αž€αžΌαžŠαŸ”

name: Build

on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Verify
        run: mvn -B clean verify
      - name: Test Coverage
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΎ codecov αžŠαŸ„αž™αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ jacoco αŸ” codecov αž˜αžΆαž“αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž•αŸ’αž‘αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αžœαžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

${{ secrets.CODECOV_TOKEN }} β€” αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αž“αŸαŸ‡αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž˜αŸ’αžαž„ αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž‚αžΊαž‡αžΆαž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„ GitHub αž™αžΎαž„αž’αžΆαž…αžŸαžšαžŸαŸαžšαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹/tokens/hosts/urls αž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž˜αž·αž“αž‚αž½αžšαž”αž‰αŸ’αž…αžΌαž›αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž€αžΌαžŠαžƒαŸ’αž›αžΆαŸ†αž„αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αž’αžαŸαžšαž‘αŸ…αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸ…αž›αžΎ GitHubαŸ–

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž“αŸ… codecov.io αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžαžΆαž˜αžšαž™αŸˆ GitHub αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž‚αž˜αŸ’αžšαŸ„αž„αžŸαžΆαž’αžΆαžšαžŽαŸˆ αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αŸ’αžœαžΎαžαžΆαž˜αžαŸ†αžŽαžŠαžΌαž…αž“αŸαŸ‡αŸ– αžˆαŸ’αž˜αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ GitHub/ [αžˆαŸ’αž˜αŸ„αŸ‡ repo] αŸ” αžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“αž€αŸαž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αž”αžΆαž“αžŠαŸ‚αžš αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž•αŸ’αžαž›αŸ‹αžŸαž·αž‘αŸ’αž’αž· codecov αžŠαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ Github αŸ”

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž”αž“αŸ’αžαŸ‚αž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ jacoco αž‘αŸ…αž―αž€αžŸαžΆαžš POMαŸ–

<plugin>
	<groupId>org.jacoco</groupId>
	<artifactId>jacoco-maven-plugin</artifactId>
	<version>0.8.4</version>
	<executions>
		<execution>
			<goals>
				<goal>prepare-agent</goal>
			</goals>
		</execution>
		<!-- attached to Maven test phase -->
		<execution>
			<id>report</id>
			<phase>test</phase>
			<goals>
				<goal>report</goal>
			</goals>
		</execution>
	</executions>
</plugin>
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.22.2</version>
	<configuration>
		<reportFormat>plain</reportFormat>
		<includes>
			<include>**/*Test*.java</include>
			<include>**/*IT*.java</include>
		</includes>
	</configuration>
</plugin>

αž₯αž‘αžΌαžœαž“αŸαŸ‡ codecov bot αž“αžΉαž„αž”αž‰αŸ’αž…αžΌαž›αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΈαž˜αž½αž™αŸ— αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αž€αŸ’αžšαžΆαž αŸ’αžœαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΆαžšαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αŸ–

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αžαŸ„αŸ‡αž”αž“αŸ’αžαŸ‚αž˜αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αž

αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αžšαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΎ sonar cloud αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžœαž·αž—αžΆαž‚αž€αžΌαžŠαž‹αž·αžαž·αžœαž“αŸ’αž αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… travis-ci αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αžœαžΆβ€‹αž‡αžΆβ€‹αž‡αŸ†αž αžΆαž“β€‹αž‘αžΌαž‡αžΈαžαž›β€‹αž–αŸαž›β€‹αž’αŸ’αžœαžΎβ€‹αž…αŸ†αžŽαžΆαž€β€‹αžŸαŸ’αžšαž»αž€β€‹αž‘αŸ… GitHub Actions αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž’αŸ’αžœαžΎβ€‹αžŠαžΌαž…β€‹αž‚αŸ’αž“αžΆαŸ” αž‘αžΈαž•αŸ’αžŸαžΆαžšαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž‚αžΊαž‡αžΆαžšαžΏαž„αžŠαŸαžαŸ’αžšαž‡αžΆαž€αŸ‹αž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž›αžΎαž€αž“αŸαŸ‡αžœαžΆαž’αŸ’αžœαžΎαž±αŸ’αž™αžαŸ’αž‰αž»αŸ†αžαž€αž…αž·αžαŸ’αžαž”αž“αŸ’αžαž·αž… αž–αŸ’αžšαŸ„αŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž€αžΆαžš αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž„αžΆαžšαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆ sonar αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžœαž·αž—αžΆαž‚αž‚αž˜αŸ’αžšαŸ„αž„αž›αžΎ maven ឬ gradle αž‘αŸαŸ” αž–αž·αžβ€‹αžŽαžΆαžŸαŸ‹ αž“αŸαŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαžšαžŸαŸαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž―αž€αžŸαžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž’αŸ’αž“αž€β€‹αžŽαžΆβ€‹αž’αžΆαž“β€‹αžœαžΆ?!

αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαžαžΆαž˜αžšαž™αŸˆαžŸαž€αž˜αŸ’αž˜αž—αžΆαž– αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαžœαžΆαžαžΆαž˜αžšαž™αŸˆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ mvnαŸ–

name: SonarCloud

on:
  push:
    branches:
      - master
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  sonarcloud:
    runs-on: ubuntu-16.04
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Analyze with SonarCloud
#       set environment variables:
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
#       run sonar maven plugin:
        run: mvn -B verify sonar:sonar -Dsonar.projectKey=antkorwin_github-actions -Dsonar.organization=antkorwin-github -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN -Dsonar.coverage.jacoco.xmlReportPaths=./target/site/jacoco/jacoco.xml

SONAR_TOKEN - αž’αžΆαž…αžšαž€αž‘αž·αž‰αž”αžΆαž“αž“αŸ… sonarcloud.io αž αžΎαž™αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžœαžΆαžŠαŸ„αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αŸ” GITHUB_TOKEN - αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αžŠαŸ‚αž› GitHub αž”αž„αŸ’αž€αžΎαž αžŠαŸ„αž™αž˜αžΆαž“αž‡αŸ†αž“αž½αž™αž–αžΈ sonarcloud [bot] αž“αžΉαž„αž’αžΆαž…αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ Git αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž»αž€αžŸαžΆαžšαž±αŸ’αž™αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ”

Dsonar.projectKey - αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αž“αŸ…αž€αŸ’αž“αž»αž„ sonar αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αŸ”

Dsonar.organization - αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αž’αž„αŸ’αž‚αž€αžΆαžšαž–αžΈ GitHub αŸ”

αž™αžΎαž„αž’αŸ’αžœαžΎαžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰ αž αžΎαž™αžšαž„αŸ‹αž…αžΆαŸ† sonarcloud [bot] αž…αžΌαž›αž˜αž€αž€αŸ’αž“αž»αž„αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αŸ–

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαžŠαŸ„αŸ‡αž›αŸ‚αž„

αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž”αžΆαž“αŸ” αžαŸ„αŸ‡αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› GitHub Actions αž’αžΆαž…αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ”

αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž€αžΆαžš αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž€αžΌαžŠαž“αŸ…αž€αŸ’αž“αž»αž„ bitbucket (αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαžŠαžΌαž…αž‡αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΏαž„αž“αŸ„αŸ‡ β€œαžαŸ’αž‰αž»αŸ†αžŸαžšαžŸαŸαžšαž‘αŸ… bitbucket αž–αŸαž›αžαŸ’αž„αŸƒ αž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž‘αŸ… GitHub αž“αŸ…αž–αŸαž›αž™αž”αŸ‹β€)αŸ” αž‡αžΆαž’αž€αž»αžŸαž› bitbucket αž˜αž·αž“αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž‘αŸαŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαž˜αž½αž™ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž“αžΈαž˜αž½αž™αŸ— αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž„αŸ’αž€αžΎαžαž‘αŸ†αž–αŸαžšαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαžŸαž–αŸ’αžœαžŠαŸ„αž™αžŠαŸƒ αž αžΎαž™αž”αŸ„αŸ‡αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αžŸαŸ’αžœαŸ‚αž„αžšαž€αžαžΆαž˜αžœαž·αž˜αžΆαž“αž“αŸƒαž…αž·αžαŸ’αž αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ jira αž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αŸ” αž˜αžΆαž“αž±αž€αžΆαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαž»αžŸ αž’αŸ’αž“αž€αž’αžΆαž…αž—αŸ’αž›αŸαž…αž’αŸ’αžœαžΈαž˜αž½αž™ αž¬αž”αž‰αŸ’αž…αžΌαž›αž’αŸ’αžœαžΈαž˜αž½αž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αžΆαž›αž–αžΈαž›αžΎαž€αž˜αž»αž“ αž–αŸαž›αžαŸ’αž›αŸ‡αžœαžΆαž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαžαŸ’αžšαžΌαžœαž…αžΆαžαŸ‹αžαŸ’αž“αžΆαž€αŸ‹αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž’αŸ’αžœαžΈαž“αŸ„αŸ‡αž‘αŸ - αžαžΎαžœαžΆαž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸ αž¬αž‡αž½αžŸαž‡αž»αž›αž€αŸ†αž αž»αžŸ αž¬αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž› ឬ αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ”

αžαžΎαžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub αž’αžΆαž…αž‡αž½αž™αž™αžΎαž„αž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…? αž˜αžΆαž“αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž˜αž½αž™ - αžŸαŸαž…αž€αŸ’αžαžΈαž–αŸ’αžšαžΆαž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž‚αŸ†αžšαžΌαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαžŸαŸ†αžŽαžΎαž‘αžΆαž‰ αž αžΎαž™αžŠαžΆαž€αŸ‹αž‡αžΆαž€αŸ’αžšαž»αž˜αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αŸ–

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž‚αŸ†αžšαžΌαž‚αŸ†αžšαžΌαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαŸ€αž”αž…αŸ†αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸ (.github/release-drafter.yml)αŸ–

name-template: 'v$NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
categories:
  - title: ' New Features'
    labels:
      - 'type:features'
# Π² эту ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ собираСм всС PR с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ type:features

  - title: ' Bugs Fixes'
    labels:
      - 'type:fix'
# Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ для ΠΌΠ΅Ρ‚ΠΊΠΈ type:fix ΠΈ Ρ‚.Π΄.

  - title: ' Documentation'
    labels:
      - 'type:documentation'

  - title: ' Configuration'
    labels:
      - 'type:config'

change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
template: |
  ## Changes
  $CHANGES

αž”αž“αŸ’αžαŸ‚αž˜αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžŸαŸαž…αž€αŸ’αžαžΈαž–αŸ’αžšαžΆαž„ (.github/workflows/release-draft.yml)αŸ–

name: "Create draft release"

on:
  push:
    branches:
      - master

jobs:
  update_draft_release:
    runs-on: ubuntu-18.04
    steps:
      - uses: release-drafter/release-drafter@v5
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

αžšαžΆαž›αŸ‹αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž…αžΆαž”αŸ‹αž–αžΈαž–αŸαž›αž“αŸαŸ‡αžαž‘αŸ… αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· - αžœαŸαž‘αž˜αž“αŸ’αž!

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžŸαŸ†αžŽαž½αžšαž’αžΆαž…αž€αžΎαžαž‘αžΎαž„: αž…αž»αŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž—αŸ’αž›αŸαž…αžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αž“αŸ…αž€αŸ’αž“αž»αž„ PR? αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαž”αŸ’αžšαž—αŸαž‘αžŽαžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαžΆαž€αŸ‹αžœαžΆ αž αžΎαž™αž˜αŸ’αžαž„αž‘αŸ€αžαž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαžΆαžŠαŸ„αž™αžŠαŸƒ αžŠαŸ„αž™ PR αž“αžΈαž˜αž½αž™αŸ—αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž - αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžŸαŸ’αž›αžΆαž€ - αžœαžΆαž–αž·αž“αž·αžαŸ’αž™αžšαž€αž˜αžΎαž›αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαžŸαŸ’αž›αžΆαž€αž“αŸ…αž›αžΎαžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αŸ αž“αŸ„αŸ‡αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž“αžΉαž„αž”αžšαžΆαž‡αŸαž™ αž αžΎαž™αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰αžŸαžΆαžšαž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

name: "Verify type labels"

on:
  pull_request:
    types: [opened, labeled, unlabeled, synchronize]

jobs:
  triage:
    runs-on: ubuntu-18.04
    steps:
      - uses: zwaldowski/match-label-action@v2
        with:
          allowed: 'type:fix, type:features, type:documentation, type:tests, type:config'

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžšαžΆαž›αŸ‹αž€αžΆαžšαžŸαŸ’αž“αžΎαžŸαž»αŸ†αž‘αžΆαž‰αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ„αž™αžŸαŸ’αž›αžΆαž€αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αžŸαŸ’αž›αžΆαž€: type:fix, type:features, type:documentation, type:tests, type:config.

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαžŸαŸ†αžŽαžΎαž‘αžΆαž‰

αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž™αžΎαž„αž”αžΆαž“αž”αŸ‰αŸ‡αž”αŸ’αžšαž’αžΆαž“αž”αž‘αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž„αžΆαžšαž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ†αžŽαžΎαž‘αžΆαž‰ αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαžΌαž…αž‡αžΆαž’αŸ’αž“αž€αžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€ αžœαžΆαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αž“αŸ…αž€αŸ’αž“αž»αž„ PR αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž™αžΎαž„αž’αžΆαž…αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž‡αžΆ [αž”αž„αŸ’αž€αžΎαž] αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αž€αžΆαž“αŸ‹αžαž .github/workflow.

αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αžœαžΆαž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αžŽαžΆαžŸαŸ‹αŸ–

name: "Auto-assign themes to PR"

on:
  - pull_request

jobs:
  triage:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/labeler@v2
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}

αž™αžΎαž„αž€αŸαžαŸ’αžšαžΌαžœαž€αžΆαžšαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž€αžΆαžšαž†αŸ’αž›αžΎαž™αž†αŸ’αž›αž„αžšαžœαžΆαž„αžαžαž‚αž˜αŸ’αžšαŸ„αž„ αž“αž·αž„αž”αŸ’αžšαž’αžΆαž“αž”αž‘αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ–

theme:build:
  - ".github/**"
  - "pom.xml"
  - ".travis.yml"
  - ".gitignore"
  - "Dockerfile"

theme:code:
  - "src/main/*"

theme:tests:
  - "src/test/*"

theme:documentation:
  - "docs/**"

theme:TRASH:
  - ".idea/**"
  - "target/**"

αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž‡αŸ„αž‚αž‡αŸαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸ‚αž›αžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸ‚αž›αž–αž·αž“αž·αžαŸ’αž™αžšαž€αž˜αžΎαž›αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαžŸαŸ’αž›αžΆαž€αžŠαŸ‚αž›αž‘αžΆαž˜αž‘αžΆαžšαž“αŸ„αŸ‡ αžŸαŸ’αž›αžΆαž€αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž˜αž·αž“αž…αž„αŸ‹αžƒαžΎαž‰αžŸαŸ’αž›αžΆαž€αžŠαŸ‚αž›αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ„αž™αž”αžΌαžαž“αŸ„αŸ‡αž‘αŸαŸ” αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΆαŸ†αž„αž–αžΈαžšαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸαŸ‡αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎαžŽαžΆαžŸαŸ‹ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŸαŸ’αž›αžΆαž€αž–αžΈαž”αž‰αŸ’αž‡αžΈαž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ”

αžŠαž›αŸ‹αž–αŸαž›αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž αžΎαž™αŸ”

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‡αžΆαž…αŸ’αžšαžΎαž“αžαžΆαž˜αžšαž™αŸˆ GitHub Actions (αžαžΆαž˜αžšαž™αŸˆ ssh αžαžΆαž˜αžšαž™αŸˆ scp αž“αž·αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ docker-hub) αž αžΎαž™αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž“αž·αž™αžΆαž™αž”αžΆαž“αžαžΆ αž‘αŸ†αž“αž„αž‡αžΆαž’αŸ’αž“αž€αž“αžΉαž„αžšαž€αžƒαžΎαž‰αžœαž·αž’αžΈαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αž»αž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž˜αž·αž“αžαžΆαž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αŸ„αž„αž™αŸ‰αžΆαž„αžŽαžΆαž“αŸ„αŸ‡αž‘αŸαŸ” αž‚αžΊ

αžαŸ’αž‰αž»αŸ†αž…αžΌαž›αž…αž·αžαŸ’αžαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžαŸ‚αž˜αž½αž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžšαž”αŸ€αž”αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹ GitHub Packages (αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αžΆαžαž·αž€αžΆαž‚αŸ„αž›αž–αžΈαžš, npm, jar, docker)αŸ”

αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– docker αž“αž·αž„αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž‰αŸ’αž…αž”αŸ‹ GitHubαŸ–

name: Deploy docker image

on:
  push:
    branches:
      - 'master'

jobs:

  build_docker_image:
    runs-on: ubuntu-18.04
    steps:

#     Build JAR:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Package
        run: mvn -B clean compile package -DskipTests

#     Set global environment variables:
      - name: set global env
        id: global_env
        run: |
          echo "::set-output name=IMAGE_NAME::${GITHUB_REPOSITORY#*/}"
          echo "::set-output name=DOCKERHUB_IMAGE_NAME::docker.pkg.github.com/${GITHUB_REPOSITORY}/${GITHUB_REPOSITORY#*/}"

#     Build Docker image:
      - name: Build and tag image
        run: |
          docker build -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:latest" -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:${GITHUB_SHA::8}" .

      - name: Docker login
        run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}

#     Publish image to github package repository:
      - name: Publish image
        env:
          IMAGE_NAME: $GITHUB_REPOSITORY
        run: docker push "docker.pkg.github.com/$GITHUB_REPOSITORY/${{ steps.global_env.outputs.IMAGE_NAME }}"

αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš JAR αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž‚αžŽαž“αžΆαž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹ GitHub docker registry αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αžšαžΌαž”αž—αžΆαž–αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž˜αžΆαž“β€‹αž›αŸ’αž”αž·αž…β€‹αž˜αž½αž™β€‹αž…αŸ†αž“αž½αž“β€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž˜αž·αž“β€‹αž‘αžΆαž“αŸ‹β€‹αž”αžΆαž“β€‹αž‡αž½αž”β€‹αž“αŸ…β€‹αž‘αžΎαž™β€‹αž‘αŸαŸ–

  • αžŸαŸ†αžŽαž„αŸ‹αžŠαžΌαž…αž‡αžΆαŸ– echo β€œ::set-output name=NAME::VALUE” αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαž“αŸƒαž’αžαŸαžšαž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
  • αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžαž˜αŸ’αž›αŸƒαž“αŸƒαž’αžαŸαžšαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž˜αž»αž“ αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž“αŸƒαž‡αŸ†αž αžΆαž“αž“αŸαŸ‡αŸ– ${{step.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • ធថេរ GITHUB_REPOSITORY αžŸαŸ’αžŠαž„αŸ‹αžŠαžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžˆαŸ’αž˜αŸ„αŸ‡αžƒαŸ’αž›αžΆαŸ†αž„ αž“αž·αž„αž˜αŸ’αž…αžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆ (β€œαž˜αŸ’αž…αžΆαžŸαŸ‹/repo-name”)αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžαŸ‹αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž…αŸαž‰αž–αžΈαž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸαŸ‡ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αžˆαŸ’αž˜αŸ„αŸ‡αžƒαŸ’αž›αžΆαŸ†αž„ αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ bashαŸ– ${GITHUB_REPOSITORY#*/}

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– dockerαŸ–

docker build -t "docker.pkg.github.com/antkorwin/github-actions/github-actions:latest"

αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αŸ–

docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}

αž αžΎαž™αž”αŸ„αŸ‡αž•αŸ’αžŸαžΆαž™αžšαžΌαž”αž—αžΆαž–αž‘αŸ…αž€αžΆαž“αŸ‹ GitHub Packages RepositoryαŸ–

docker push "docker.pkg.github.com/antkorwin/github-actions/github-actions"

αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž€αŸ†αžŽαŸ‚αž“αŸƒαžšαžΌαž”αž—αžΆαž– αž™αžΎαž„αž”αŸ’αžšαžΎαžαŸ’αž‘αž„αŸ‹αž‘αžΈαž˜αž½αž™αž–αžΈ SHA hash αž“αŸƒ commit - GITHUB_SHA αžœαžΆαž€αŸαž˜αžΆαž“αž…αŸ†αž“αž»αž…αž–αž·αžŸαŸαžŸαž“αŸ…αž‘αžΈαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžš αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž”αŸ‚αž”αž“αŸαŸ‡αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž“αŸ…αž–αŸαž›αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αŸαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸαž™αŸ„αž„αž‘αŸ…αžαžΆαž˜αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αž•αž„αžŠαŸ‚αžšαŸ” αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ SHA αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„ hash αžŠαŸ‚αž›αž™αžΎαž„αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ git history αž‘αŸ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–/αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– checkout αž”αž„αŸ’αž€αžΎαž hash αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžšαž”αžŸαŸ‹αžœαžΆ αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„ PR αŸ”

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž›αŸ’αž’ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αžΎαž€αž•αŸ’αž“αŸ‚αž€αž€αž‰αŸ’αž…αž”αŸ‹ (https://github.com/antkorwin/github-actions/packages) αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αžšαžΌαž”αž—αžΆαž– docker αžαŸ’αž˜αžΈαŸ–

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αžƒαžΎαž‰αž”αž‰αŸ’αž‡αžΈαž€αŸ†αžŽαŸ‚αž“αŸƒαžšαžΌαž”αž—αžΆαž– docker αž•αž„αžŠαŸ‚αžšαŸ”

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αŸ…αžŸαŸαžŸαžŸαž›αŸ‹αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž“αŸαŸ‡αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αžΎαž„αžœαž·αž‰αŸ” αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαžœαžΆαžαžΆαž˜αžšαž™αŸˆ systemd αž–αŸαž›αž˜αž½αž™αž‘αŸ€αžαŸ”

αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ GitHub ActionsαŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“ actuator αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαžšαžŸαŸαžš API αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆαž‘αŸ αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžαŸ’αž‡αž·αž›αžšαž½αž…αž αžΎαž™αŸ” αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αžΆαž‰αž˜αŸ’αž…αžΆαžŸαŸ‹αž•αŸ’αž‘αŸ‡αŸ– SERVER-URL:PORT/actuator/health

$ curl -v 127.0.0.1:8080/actuator/health

> GET /actuator/health HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.61.1
> Accept: */*

< HTTP/1.1 200
< Content-Type: application/vnd.spring-boot.actuator.v3+json
< Transfer-Encoding: chunked
< Date: Thu, 04 Jun 2020 12:33:37 GMT

{"status":"UP"}

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‚αžΊαžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž—αžΆαžšαž€αž·αž…αŸ’αž…αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ„αž™αž”αŸ’αžšαžΎ cron αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡αž‚αžΆαžαŸ‹αž˜αž·αž“αž†αŸ’αž›αžΎαž™αžαž”αž˜αž€αž™αžΎαž„αž‘αŸαž“αŸ„αŸ‡αž™αžΎαž„αž“αžΉαž„αž•αŸ’αž‰αžΎαž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αžαžΆαž˜αžαŸαž‘αŸαž€αŸ’αžšαžΆαž˜αŸ”

αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž…αžΌαžšαž™αžΎαž„αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž„αžΆαžš cronαŸ–

on:
  schedule:
    - cron:  '*/5 * * * *'

αžœαžΆαžŸαžΆαž˜αž‰αŸ’αž‰ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αž‡αžΏαžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Github αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž˜αž·αž“αžŸαž˜αž“αžΉαž„ webhooks αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαŸ– help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

αžαŸ„αŸ‡αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ„αž™αžŠαŸƒαžαžΆαž˜αžšαž™αŸˆ curlαŸ–

jobs:
  ping:
    runs-on: ubuntu-18.04
    steps:

      - name: curl actuator
        id: ping
        run: |
          echo "::set-output name=status::$(curl ${{secrets.SERVER_HOST}}/api/actuator/health)"

      - name: health check
        run: |
          if [[ ${{ steps.ping.outputs.status }} != *"UP"* ]]; then
            echo "health check is failed"
            exit 1
          fi
          echo "It's OK"

αžŠαŸ†αž”αžΌαž„ αž™αžΎαž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸαžšαžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αžΆαž“αž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αžŸαŸ†αžŽαžΎαž“αŸ„αŸ‡ αž“αŸ…αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‚αžΊ UP αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžšαžŽαžΈαž‘αŸ αž“αŸ„αŸ‡αž™αžΎαž„αž…αŸαž‰αžŠαŸ„αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžš "αž‚αŸ’αžšαž”αžŸαž„αŸ’αž€αžαŸ‹" αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž˜αž½αž™αžŠαŸ„αž™αžŠαŸƒαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž…αžΆαž€αž…αŸαž‰ 1 - αž’αžΆαžœαž»αž’αžŸαž˜αžšαž˜αŸ’αž™αŸ”

  - name: send alert in telegram
    if: ${{ failure() }}
    uses: appleboy/telegram-action@master
    with:
      to: ${{ secrets.TELEGRAM_TO }}
      token: ${{ secrets.TELEGRAM_TOKEN }}
      message: |
        Health check of the:
        ${{secrets.SERVER_HOST}}/api/actuator/health
        failed with the result:
        ${{ steps.ping.outputs.status }}

αž™αžΎαž„αž•αŸ’αž‰αžΎαž‘αŸ…αž‘αžΌαžšαž›αŸαžαž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž”αžšαžΆαž‡αŸαž™αž“αŸ…αž‡αŸ†αž αžΆαž“αž˜αž»αž“αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‰αžΎαžŸαžΆαžš αž™αžΎαž„αž”αŸ’αžšαžΎ appleboy/telegram-action αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž‘αž‘αž½αž›αž”αžΆαž“ bot token αž“αž·αž„ chat id αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαŸ– github.com/appleboy/telegram-action

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž€αž»αŸ†αž—αŸ’αž›αŸαž…αžŸαžšαžŸαŸαžšαž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž“αŸ…αž›αžΎ Github: URL αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ server αž“αž·αž„ tokens αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ telegram botαŸ”

αž”αž‘αž”αŸ’αžšαžΆαž€αŸ‹αžšαž„αŸ’αžœαžΆαž“αŸ‹ - JIRA αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžαŸ’αž‡αž·αž›

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž“αŸ’αž™αžΆαžαžΆαž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ… JIRA αž αžΎαž™αž™αžΎαž„αž”αžΆαž“αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αŸ” αžšαžΆαž”αŸ‹αžšαž™αžŠαž„αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž„αŸ’αž€αŸαžαžƒαžΎαž‰αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αž½αž™αž“αŸ…αž€αžΆαžšαž€αŸ’αžšαŸ„αž€αžˆαžšαž‘αžΎαž„ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž˜αž½αž™ αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαžŸαžΆαžαžΆαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž—αŸ’αž›αŸαž…αž‘αžΆαž‰αž”αž‰αŸ’αž αžΆαž‘αŸ…αž€αŸ’αž“αž»αž„ JIRA αŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžαŸ‚αž˜αž½αž™ αžœαžΆαž“αžΉαž„αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αžαž™αžΎαž„αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž“αŸ…αž€αŸ’αž“αž»αž„ IDE αž”αž‰αŸ’αž…αžΌαž›αžŸαžΆαžαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„ bitbucket ឬ GitHub αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αžΌαžŸαž€αž·αž…αŸ’αž…αž€αžΆαžšαž‘αŸ…αž€αŸ’αž“αž»αž„ Jira αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž“αŸαŸ‡ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΎαž€ ​​windows αžαŸ’αž˜αžΈαŸ” αž–αŸαž›αžαŸ’αž›αŸ‡αž…αžΌαž›αž˜αŸ’αžαž„αž‘αŸ€αž αž“αž·αž„αž›αŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž…αž„αž…αžΆαŸ†αž™αŸ‰αžΆαž„αž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž“αŸ„αŸ‡αž‚αŸ’αž˜αžΆαž“αž…αŸ†αžŽαž»αž…αž’αŸ’αžœαžΈαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αžΎαž€αž€αŸ’αžαžΆαžšαž˜αŸ’αžαž„αž‘αŸ€αžαž‘αŸαŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž“αŸ…αž–αŸαž›αž–αŸ’αžšαžΉαž€αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž€αžˆαžš αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž•αŸ’αž‘αžΆαŸ†αž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαŸ”

GitHub αž€αŸαž“αžΉαž„αž‡αž½αž™αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαž‘αž˜αŸ’αž›αžΆαž”αŸ‹αž“αŸαŸ‡αž•αž„αžŠαŸ‚αžš αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž™αžΎαž„αž’αžΆαž…αž‘αžΆαž‰αž”αž‰αŸ’αž αžΆαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžšαžˆαžš code_review αž“αŸ…αž–αŸαž›αž™αžΎαž„αžŠαžΆαž€αŸ‹αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‚αžΊαž’αŸ’αžœαžΎαžαžΆαž˜αž’αž“αž»αžŸαž‰αŸ’αž‰αžΆαžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžŸαžΆαžαžΆαŸ–

[имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°]-[Π½ΠΎΠΌΠ΅Ρ€ таска]-Π½Π°Π·Π²Π°Π½ΠΈΠ΅

αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΌαž“αžŸαŸ„αž‚αž˜αŸ’αžšαŸ„αž„ "GitHub Actions" αž‚αžΊ GA αž“αŸ„αŸ‡ GA-8-jira-bot αž’αžΆαž…αž‡αžΆαžŸαžΆαžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž“αž»αžœαžαŸ’αžαž—αžΆαžšαž€αž·αž…αŸ’αž… GA-8 αŸ”

αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ JIRA αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž–αžΈ Atlassian αž–αž½αž€αž‚αŸαž˜αž·αž“αž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αž‘αŸ αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαžαŸ‚αž“αž·αž™αžΆαž™αžαžΆαž–αž½αž€αž‚αŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαžαŸ‚αž’αŸ’αž“αž€αžŠαŸ‚αž›αž–αž·αžαž‡αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž™αŸ‰αžΆαž„αžŸαž€αž˜αŸ’αž˜αŸ”

αžŠαŸ†αž”αžΌαž„αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αžΌαž›αž‘αŸ… JIRA αžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αŸ– atlassian/gajira-login

jobs:
  build:
    runs-on: ubuntu-latest
    name: Jira Workflow
    steps:
      - name: Login
        uses: atlassian/gajira-login@master
        env:
          JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
          JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
          JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž‘αž‘αž½αž›αž”αžΆαž“αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ JIRA αžšαž”αŸ€αž”αž’αŸ’αžœαžΎαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ– confluence.atlassian.com/cloud/api-tokens-938839638.html

αž™αžΎαž„αžŠαž€αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž—αžΆαžšαž€αž·αž…αŸ’αž…αž…αŸαž‰αž–αžΈαžˆαŸ’αž˜αŸ„αŸ‡αžŸαžΆαžαžΆαŸ–

  - name: Find Issue
    id: find_issue
    shell: bash
    run: |
      echo "::set-output name=ISSUE_ID::$(echo ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}')"
      echo brach name: $GITHUB_HEAD_REF
      echo extracted issue: ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}'

  - name: Check Issue
    shell: bash
    run: |
      if [[ "${{steps.find_issue.outputs.ISSUE_ID}}" == "" ]]; then
        echo "Please name your branch according to the JIRA issue: [project_key]-[task_number]-branch_name"
        exit 1
      fi
      echo succcessfully found JIRA issue: ${{steps.find_issue.outputs.ISSUE_ID}}

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŸαŸ’αžœαŸ‚αž„αžšαž€αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αžΈαž•αŸ’αžŸαžΆαžš GitHub αž’αŸ’αž“αž€αž’αžΆαž…αžšαž€αžƒαžΎαž‰αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ grep αžŠαŸ„αž™αž”αŸ’αžšαžΎαžˆαŸ’αž˜αŸ„αŸ‡αžŸαžΆαžαžΆ αž–αŸ’αžšαŸ„αŸ‡αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž“αŸαŸ‡αž–αžΈ Atlassian αž˜αž·αž“αž…αž„αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αžαžΆαž˜αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžŽαžΆαž˜αž½αž™αž‘αžΎαž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαž»αžŸαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ - αž™αžΌαžšαž‡αžΆαž„αž€αžΆαžšαž’αŸ’αžœαžΎαžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαŸ„αž™αžŠαŸƒαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αŸ…αžŸαŸαžŸαžŸαž›αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž—αžΆαžšαž€αž·αž…αŸ’αž…αž‘αŸ…αž‡αž½αžšαžˆαžš "αž–αž·αž“αž·αžαŸ’αž™αž€αžΌαžŠ" αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ–

  - name: Transition issue
    if: ${{ success() }}
    uses: atlassian/gajira-transition@master
    with:
      issue: ${{ steps.find_issue.outputs.ISSUE_ID }}
      transition: "Code review"

αž˜αžΆαž“αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž–αž·αžŸαŸαžŸαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž“αŸ…αž›αžΎ GitHub αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž‚αžΊαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž˜αž»αž“ αž“αž·αž„αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž€αŸ’αž“αž»αž„ JIRA αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαžαžΆαž„αž›αžΎαŸ”

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž·αž’αžΈαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΌαžŸαž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸ…αž–αŸαž›αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ αž“αž·αž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž–αžΈαž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžš GitHub αŸ” αž‡αžΆαž‘αžΌαž‘αŸ… αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αžΆαžšαžŸαŸ’αžšαž˜αžΎαž›αžŸαŸ’αžšαž˜αŸƒ αž“αž·αž„αž”αŸ†αžŽαž„αž”αŸ’αžšαžΆαžαŸ’αž“αžΆαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž˜αŸ’αž˜αžαžΆαŸ”

αž€αžΆαžšαžšαž€αžƒαžΎαž‰

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ DEVOPS αž”αž»αžšαžΆαžŽ αž™αžΎαž„αž”αžΆαž“αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž‚αŸ’αžšαž”αŸ‹αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž–αŸ’αž™αžΆαž™αžΆαž˜ αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αžΈαž•αŸ’αžŸαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‡αŸ†αž“αž½αž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αŸ” αž±αŸ’αž™αž”αžΆαž“αž αŸ’αž˜αžαŸ‹αž…αžαŸ‹ αž αžΎαž™αž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž‰αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αžšαž„αŸ’αžœαž„αŸ‹αž“αŸƒαž‹αžΆαž“αž“αžšαž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub (αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Java)

αž”αŸ’αžšαž»αžŸ:

  • αž‘αžΈαž•αŸ’αžŸαžΆαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αžšαž”αŸ‹αž±αž€αžΆαžŸ αž“αŸαŸ‡αž‚αžΊαž–αž·αžαž‡αžΆαž‘αžΌαž™αžŽαžΆαžŸαŸ‹αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αž‚αŸαž—αžΆαž‚αž…αŸ’αžšαžΎαž“ αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž˜αžΎαž›αž€αžΌαžŠαž”αŸ’αžšαž—αž–αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆ αž¬αž”αŸ’αžšαž€αžΆαžŸαžŸαŸ†αžŽαžΎαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αŸ…αž€αžΆαž“αŸ‹αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ GitHub αŸ”
  • αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžœαŸαž‘αž·αž€αžΆαž‚αŸ„αž›αžŠαŸ…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαŸ– αž›αžΈαž“αž»αž…, mac os, αžœαžΈαž“αžŠαžΌαž‚αžΊαž‡αžΆαž˜αž»αžαž„αžΆαžšαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŽαžΆαžŸαŸ‹αŸ”
  • αž€αž‰αŸ’αž…αž”αŸ‹ Github αž‚αžΊαž‡αžΆαžšαžΏαž„αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™ αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžαŸ‚αž˜αž½αž™ αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžšαž»αž€αžšαž€αžαžΆαž˜αž”αž„αŸ’αž’αž½αž…αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž“αŸ„αŸ‡αž‘αŸ αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαŸ†αž“αŸƒαž€αžΆαžšαž…αž»αž…αž€αžŽαŸ’αžŠαž»αžšαž˜αž½αž™ αž¬αž–αžΈαžš αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž™αŸ‰αžΆαž„αž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αž‡αžΆαž˜αž½αž™αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub αŸ” αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈ Docker αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαž€αŸαž‡αžΆαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŠαŸαž›αŸ’αž’αž•αž„αžŠαŸ‚αžšαŸ”
  • GitHub αž›αžΆαž€αŸ‹αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αž„αŸ’αž€αžΎαž αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΆαžšαž”αŸ’αžšαžΎαžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž“αž·αž„αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‚αžΊαž˜αž·αž“αž‚αž½αžšαž±αŸ’αž™αžαŸ’αž›αžΆαž…αž“αŸ„αŸ‡αž‘αŸαŸ” αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž–αž·αžŸαŸ„αž’αž“αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸαž”αžšαž·αžŸαž»αž‘αŸ’αž’αžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžŸαžΌαž›αž“αŸ„αŸ‡αž‘αŸαŸ”
  • αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž 

αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·:

  • YML αž’αž‰αŸ’αž…αžΉαž„αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž…αžΌαž›αž…αž·αžαŸ’αžαž‚αžΆαžαŸ‹αž‘αŸαŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž›αŸ†αž αžΌαžšαž”αŸ‚αž”αž“αŸαŸ‡ αžŸαžΆαžšαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž‚αžΊ "αž‡αž½αžŸαž‡αž»αž›αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™ yml" αž–αŸαž›αžαŸ’αž›αŸ‡αž’αŸ’αž“αž€αž—αŸ’αž›αŸαž…αžŠαžΆαž€αŸ‹αž•αŸ’αž‘αžΆαŸ†αž„αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™ αž‡αž½αž“αž€αžΆαž›αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαžœαžΆαžαž»αžŸαŸ” αž‡αžΆαž‘αžΌαž‘αŸ… αž€αžΆαžšαž’αž„αŸ’αž‚αž»αž™αž“αŸ…αž˜αž»αžαž’αŸαž€αŸ’αžšαž„αŸ‹αž‡αžΆαž˜αž½αž™ protractor αž“αž·αž„αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžŠαŸαžšαžΈαž€αžšαžΆαž™αž”αŸ†αž•αž»αžαž“αŸ„αŸ‡αž‘αŸαŸ”
  • DEBUG αž€αžΆαžšαž€αŸ‚αž€αŸ†αž αž»αžŸαž›αŸ†αž αžΌαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αž αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž€αžΆαž“αŸ‹αž€αž»αž„αžŸαžΌαž›αž˜αž·αž“αžαŸ‚αž„αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‡αžΆαž”αŸ’αžšαž—αŸαž‘ "αž’αŸ’αž“αž€αž αž½αžŸαž–αŸαž›αž αžΎαž™" αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αŸ” αž’αŸ’αž“αž€αž’αŸ’αž›αžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ IDEA αžŠαŸαž„αžΆαž™αžŸαŸ’αžšαž½αž› αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸαž’αŸ’αžœαžΈαž˜αž½αž™αŸ” .
  • αž’αŸ’αž“αž€αž’αžΆαž…αžŸαžšαžŸαŸαžšαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž›αžΎαž’αŸ’αžœαžΈαž€αŸαž”αžΆαž“ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžšαž»αŸ†αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Docker αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αžαŸ‚ javascript αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžš αž‡αžΆαž€αžΆαžšαž–αž·αžαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαž“αŸƒαžšαžŸαž‡αžΆαžαž· αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž…αžΌαž›αž…αž·αžαŸ’αžαž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ js αŸ”

αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžšαŸ†αž›αžΉαž€αž’αŸ’αž“αž€αžαžΆ αžƒαŸ’αž›αžΆαŸ†αž„αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ– github.com/antkorwin/github-actions

αžŸαž”αŸ’αžαžΆαž αŸαž€αŸ’αžšαŸ„αž™αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžŸαž˜αŸ’αžαŸ‚αž„αž‡αžΆαž˜αž½αž™ αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸ αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž“αŸ’αž“αž·αžŸαžΈαž‘ Heisenbug 2020 Piter αŸ” αžαŸ’αž‰αž»αŸ†β€‹αž“αžΉαž„β€‹αž”αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αž˜αž·αž“β€‹αžαŸ’αžšαžΉαž˜β€‹αžαŸ‚β€‹αžšαž”αŸ€αž”β€‹αž‡αŸ€αžŸαžœαžΆαž„β€‹αž€αŸ†αž αž»αžŸβ€‹αž–αŸαž›β€‹αžšαŸ€αž”αž…αŸ†β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αžαŸαžŸαŸ’αžβ€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž€αŸβ€‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€β€‹αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αž‡αžΆαž˜αž½αž™β€‹αžŸαŸ†αžŽαž»αŸ†β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αž€αŸ’αž“αž»αž„β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Java αž•αž„β€‹αžŠαŸ‚αžš!

αž”αŸ’αžšαž—αž–: www.habr.com