GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдиреА рдкрдбрд╝рддреА рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реЛрддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдиреА рдХреБрдЫ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЯреНрд░реИрд╡рд┐рд╕-рд╕реАрдЖрдИ рдФрд░ рдЯреАрдорд╕рд┐рдЯреА рд╕реЗ рдЧрд┐рдЯрд╣рдм рдПрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдФрд░ рдЗрд╕рд╕реЗ рдпрд╣реА рдкрд░рд┐рдгрд╛рдо рдирд┐рдХрд▓рд╛ред

рд╣рдо рдХреНрдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ?

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЖрдЗрдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ/рдЬрд╛рд╡рд╛ 11/рдорд╛рд╡реЗрди рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реЛрдЧреА; рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг REST API рдирд┐рдпрдВрддреНрд░рдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдЖрдк рдпрд╣рд╛рдВ рд╕реНрд░реЛрдд рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: github.com/antkorwin/github-actions рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рднреА рдЪрд░рдг рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдЬрд┐рд░рд╛ рдФрд░ рдпреЛрдЬрдирд╛

рдпрд╣ рдХрд╣рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рд╣рдо рдЖрдорддреМрд░ рдкрд░ JIRA рдХреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдмреЛрд░реНрдб рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рдкрд╣рд▓реЗ рдЕрдВрдХ рдЬреЛрдбрд╝реЗрдВ:

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗ рдХрд┐ JIRA рдФрд░ GitHub рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХреМрди рд╕реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬрд╝реЗрдВ рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдорд╛рд╡реЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд╣рдореЗрдВ рдмрд╕ рдПрдорд╡реАрдПрди рдХреНрд▓реАрди рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Github Actions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд yml рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдореБрдЭреЗ "yml рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдо рдЗрд╕реЗ .github/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ/ рдлрд╝рд╛рдЗрд▓ 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 тАФ рдпрд╣ рдЙрд╕ рдЗрд╡реЗрдВрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдПрдЧреАред

рдЪрд╛рд▓реВ: рдкреБрд▓_рдЕрдиреБрд░реЛрдз/рдкреБрд╢ - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рд╣рд░ рдмрд╛рд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдорд╛рд╕реНрдЯрд░ рдХреЛ рдкреБрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ (рдиреМрдХрд░рд┐рдпреЛрдВ) рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдЪрд░рдг (рдХрджрдо) рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдПред

рдЗрд╕рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд - рдпрд╣рд╛рдВ рд╣рдо рд▓рдХреНрд╖реНрдп рдУрдПрд╕ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдЖрдк рдореИрдХ рдУрдПрд╕ рднреА рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдпрд╣ рдХрд╛рдлреА рдорд╣рдВрдЧрд╛ рд╣реИ (рд▓рд┐рдирдХреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ)ред

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЖрдкрдХреЛ рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░рд┐рдпрд╛рдУрдВ/рд╕реЗрдЯрдЕрдк-рдЬрд╛рд╡рд╛ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЬрд╛рд╡рд╛ 11 рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рде рдореЗрдВ рд╣рдо рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдпреЗ рд╡реЗ рддрд░реНрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореЗрд╡реЗрди рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ рд╣реИ: run: mvn -B clean package рдЭрдВрдбрд╛ -B рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдЧреИрд░-рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдорд╛рд╡реЗрди рдЕрдЪрд╛рдирдХ рд╣рдорд╕реЗ рдХреБрдЫ рди рдкреВрдЫрдирд╛ рдЪрд╛рд╣реЗ

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдорд╣рд╛рди! рдЕрдм, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдорд╛рд╕реНрдЯрд░ рдХреЗ рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд▓реЙрдиреНрдЪ

рдЕрд╕реЗрдВрдмрд▓реА рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕реЗрдВрдмрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд▓рд╛ рдХрджрдо рдкрд░реАрдХреНрд╖рдг рд░рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдЖрдк рдкреАрдЖрд░ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ - рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рднреА рдорд░реНрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА рд╢рд╛рдЦрд╛ рдЪрд▓рд╛рдирд╛ рдирд╣реАрдВ рднреВрд▓рддрд╛ рд╣реИред

рд╣рдо рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВрдЧреЗ рдФрд░ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╕рд╛рде рд╣реА рд╣рдо рдХреЛрдб-рдХрд╡рд░реЗрдЬ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

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 }}

рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬреИрдХреЛрдХреЛ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХреЛрдбрдХреЛрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдХреЛрдбрдХреЛрд╡ рдХреА рдЕрдкрдиреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

${{ secrets.CODECOV_TOKEN }} - рд╣рдо рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЗрдЦреЗрдВрдЧреЗ, рд░рд╣рд╕реНрдп GitHub рдореЗрдВ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИ, рд╣рдо рд╡рд╣рд╛рдВ рдкрд╛рд╕рд╡рд░реНрдб/рдЯреЛрдХрди/рд╣реЛрд╕реНрдЯ/рдпреВрдЖрд░рдПрд▓ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдк GitHub рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдЖрдк рдпрд╣рд╛рдВ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЛрдбрдХреЛрд╡.рдЖрдИрдУ GitHub рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕ рддрд░рд╣ рдПрдХ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛: GitHub рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо/[рд░реЗрдкреЛ рдирд╛рдо]. рдПрдХ рдирд┐рдЬреА рднрдВрдбрд╛рд░ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Github рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЛрдбрдХреЛрд╡ рдЕрдзрд┐рдХрд╛рд░ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдЬреИрдХреЛрдХреЛ рдкреНрд▓рдЧрдЗрди рдХреЛ 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>

рдЕрдм рдХреЛрдбрдХреЛрд╡ рдмреЙрдЯ рд╣рдорд╛рд░реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдХ рдХрд╡рд░реЗрдЬ рдкрд░рд┐рд╡рд░реНрддрди рдЧреНрд░рд╛рдл рдЬреЛрдбрд╝ рджреЗрдЧрд╛:

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдЖрдЗрдП рдПрдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЬреЛрдбрд╝реЗрдВ

рдЕрдкрдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдореИрдВ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реЛрдирд╛рд░ рдХреНрд▓рд╛рдЙрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЯреНрд░реИрд╡рд┐рд╕-рд╕реАрдЖрдИ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GitHub Actions рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдХрджрдо рд╣реИред рдПрдХреНрд╢рди рдорд╛рд░реНрдХреЗрдЯ рдПрдХ рдЕрдЪреНрдЫреА рдЪреАрдЬрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдирд┐рд░рд╛рд╢ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрджрдд рд╕реЗ рдореБрдЭреЗ рд╡рд╣ рдПрдХреНрд╢рди рдорд┐рд▓ рдЧрдпрд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЬрд╝рд░реВрд░рдд рдереА рдФрд░ рдЗрд╕реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕реЛрдирд╛рд░ рдорд╛рд╡реЗрди рдпрд╛ рдЧреНрд░реЗрдбреЗрд▓ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрдврд╝рддрд╛ рдХреМрди рд╣реИ?!

рдпрд╣ рдХрд┐рд╕реА рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдПрдорд╡реАрдПрди рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░реЗрдВрдЧреЗ:

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 - рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╕реЛрдирд╛рд░рдХреНрд▓рд╛рдЙрдб.рдЖрдИрдУ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд░рд╣рд╕реНрдпреЛрдВ рдореЗрдВ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред GITHUB_рдЯреЛрдХрди - рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯреЛрдХрди рд╣реИ рдЬрд┐рд╕реЗ GitHub рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рд╕реЛрдирд╛рд░рдХреНрд▓рд╛рдЙрдб [рдмреЙрдЯ] рд╣рдореЗрдВ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╕рдВрджреЗрд╢ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП Git рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

Dsonar.projectKey - рд╕реЛрдирд╛рд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо, рдЖрдк рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

Dsonar.рд╕рдВрдЧрдарди - GitHub рд╕реЗ рд╕рдВрдЧрдарди рдХрд╛ рдирд╛рдо.

рд╣рдо рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЛрдирд╛рд░рдХреНрд▓рд╛рдЙрдб [рдмреЙрдЯ] рдХреЗ рдЖрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ:

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рд░рд┐рд╣рд╛рдИ рдкреНрд░рдмрдВрдзрди

рдмрд┐рд▓реНрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдЧрдП рд╣реИрдВ, рдФрд░ рд╣рдо рдПрдХ рд░рд┐рд▓реАрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ GitHub рдХреНрд░рд┐рдпрд╛рдПрдБ рд░рд┐рд▓реАрдЬрд╝ рдкреНрд░рдмрдВрдзрди рдХреЛ рдХреИрд╕реЗ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреА рд╣реИрдВред

рдХрд╛рд░реНрдпрд╕реНрдерд▓ рдкрд░, рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдХреЛрдб рдмреЗрд╕ рдмрд┐рдЯрдмрдХреЗрдЯ рдореЗрдВ рд╣реИ (рд╕рдм рдХреБрдЫ рдЙрд╕ рдХрд╣рд╛рдиреА рдЬреИрд╕рд╛ рд╣реИ "рдореИрдВ рджрд┐рди рдХреЗ рджреМрд░рд╛рди рдмрд┐рдЯрдмрдХреЗрдЯ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рд░рд╛рдд рдореЗрдВ рдЧрд┐рдЯрд╣рдм рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реВрдВ")ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмрд┐рдЯрдмрдХреЗрдЯ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░рд┐рд▓реАрдЬрд╝ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рдВрдЧрдо рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдкреЗрдЬ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╡рд╣рд╛рдВ рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛, рдорди рдХреЗ рдорд╣рд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛, рдЬреАрд░рд╛ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрдорд┐рдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЧрд▓рддреА рдХрд░рдиреЗ рдХреА рдХрдИ рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рд╣реИрдВ, рдЖрдк рдХреБрдЫ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХрднреА-рдХрднреА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рдХрд┐рд╕ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП - рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдпрд╛ рдмрдЧ рдлрд┐рдХреНрд╕ рд╣реИ, рдпрд╛ рд╕рдВрдкрд╛рджрди рдкрд░реАрдХреНрд╖рдг рд╣реИ, рдпрд╛ рдХреБрдЫ рдврд╛рдВрдЪрд╛рдЧрддред

GitHub рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣рдорд╛рд░реА рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВ? рдПрдХ рдорд╣рд╛рди рдХрд╛рд░реНрдп рд╣реИ - рд░рд┐рд▓реАрдЬрд╝ рдбреНрд░рд╛рдлреНрдЯрд░, рдпрд╣ рдЖрдкрдХреЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреНрд╕ рдлрд╝рд╛рдЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рд░рд┐рдкреЛрд░реНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ (.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 }}

рдЕрдм рд╕реЗ рд╕рднреА рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреНрд╕ рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ - рдЬрд╛рджреВ!

рдпрд╣рд╛рдВ рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреАрдЖрд░ рдореЗрдВ рдЯреИрдЧ рд▓рдЧрд╛рдирд╛ рднреВрд▓ рдЬрд╛рдПрдВ? рдлрд┐рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдП, рдФрд░ рдлрд┐рд░ рд╕реЗ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛ - рд▓реЗрдмрд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкрд░ рдЯреИрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХ рдЯреИрдЧ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВрдЧреЗред

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'

рдЕрдм рдХрд┐рд╕реА рднреА рдкреБрд▓-рдЕрдиреБрд░реЛрдз рдХреЛ рдХрд┐рд╕реА рдПрдХ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдкреНрд░рдХрд╛рд░: рдареАрдХ рдХрд░реЗрдВ, рдкреНрд░рдХрд╛рд░: рд╕реБрд╡рд┐рдзрд╛рдПрдБ, рдкреНрд░рдХрд╛рд░: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рдкреНрд░рдХрд╛рд░: рдкрд░реАрдХреНрд╖рдг, рдкреНрд░рдХрд╛рд░: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдСрдЯреЛ-рдПрдиреЛрдЯреЗрд╢рди

рдЪреВрдБрдХрд┐ рд╣рдордиреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рдХрд╛рд░реНрдп рдЬреИрд╕реЗ рд╡рд┐рд╖рдп рдкрд░ рдмрд╛рдд рдХреА рд╣реИ, рддреЛ рдпрд╣ рд▓реЗрдмрд▓рд░ рдЬреИрд╕реА рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдпрд╣ рдкреАрдЖрд░ рдореЗрдВ рдЯреИрдЧ рдбрд╛рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╛рдЗрд▓реЗрдВ рдмрджрд▓реА рдЧрдИ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд┐рд╕реА рднреА рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ [рдмрд┐рд▓реНрдб] рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ .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 рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдореИрдВрдиреЗ GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ (ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, scp рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдФрд░ docker-hub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдмрд╛рдЗрдирд░реА рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛, рдЪрд╛рд╣реЗ рдЖрдкрдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд┐рддрдиреА рднреА рдЯреЗрдврд╝реА рдХреНрдпреЛрдВ рди рд╣реЛ рд╣реИред

рдореБрдЭреЗ рд╕рдВрдкреВрд░реНрдг рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рдЖрдпрд╛, рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ GitHub рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП (рдпрд╣ рдмрд╛рдЗрдирд░реА рд╕рд╛рдордЧреНрд░реА, рдПрдирдкреАрдПрдо, рдЬрд╛рд░, рдбреЙрдХрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдВрдбрд╛рд░ рд╣реИ)ред

рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕реЗ 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 рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдкрде рдФрд░ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдХреЗ рдирд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдХреБрдЫ рддрд░рдХреАрдмреЗрдВ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рд╣рдо рдЕрднреА рддрдХ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ:

  • рдПрдХ рдирд┐рд░реНрдорд╛рдг рдЬреИрд╕реЗ: echo "::set-output name=NAME::VALUE" рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдЪрд░рдг рдореЗрдВ рдПрдХ рдЪрд░ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕реЗ рдЕрдиреНрдп рд╕рднреА рдЪрд░рдгреЛрдВ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХреЗред
  • рдЖрдк рдЗрд╕ рдЪрд░рдг рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ${{steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • рдорд╛рдирдХ GITHUB_REPOSITORY рд╡реИрд░рд┐рдПрдмрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдЙрд╕рдХреЗ рдорд╛рд▓рд┐рдХ ("рдорд╛рд▓рд┐рдХ/рд░реЗрдкреЛ-рдирд╛рдо") рдХрд╛ рдирд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдирд╛рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЗрд╕ рд▓рд╛рдЗрди рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмреИрд╢ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: ${GITHUB_REPOSITORY#*/}

рдЖрдЧреЗ рд╣рдореЗрдВ рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

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 рдкреИрдХреЗрдЬ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ:

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

рдЫрд╡рд┐ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдорд┐рдЯ рдХреЗ SHA рд╣реИрд╢ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдВрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - GITHUB_SHA рдпрд╣рд╛рдВ рднреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рди рдХреЗрд╡рд▓ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рддреЗ рд╕рдордп, рдмрд▓реНрдХрд┐ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднреА рдРрд╕рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рдШрдЯрдирд╛, рддреЛ SHA рдЙрд╕ рд╣реИрд╢ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЧрд┐рдЯ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреАрдЖрд░ рдореЗрдВ рдЧрддрд┐рд░реЛрдз рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдПрдВ/рдЪреЗрдХрдЖрдЙрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрд╢ рдмрдирд╛рддреА рд╣реИред

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреИрдХреЗрдЬ рдЕрдиреБрднрд╛рдЧ (https://github.com/antkorwin/github-actions/packages) рдЦреЛрд▓рдиреЗ рдкрд░, рдЖрдкрдХреЛ рдПрдХ рдирдИ рдбреЙрдХрд░ рдЫрд╡рд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рд╡рд╣рд╛рдВ рдЖрдк рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдФрд░ рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред рд╕рд┐рд╕реНрдЯрдордб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╢рд╛рдпрдж рдЕрдЧрд▓реА рдмрд╛рд░ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

рдирд┐рдЧрд░рд╛рдиреА

рдЖрдЗрдП GitHub Actions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕ рдкрд░ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рджреЗрдЦреЗрдВред рд╣рдорд╛рд░реЗ рдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдПрдХреНрдЪреБрдПрдЯрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд▓рд┐рдЦрдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рд╣рдордиреЗ рдЖрд▓рд╕реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рд╕рдм рдХреБрдЫ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рд╣реЛрд╕реНрдЯ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ: 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"}

рд╣рдореЗрдВ рдмрд╕ рдХреНрд░реЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рд▓рд┐рдЦрдирд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдпрд╣ рд╣рдореЗрдВ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬреЗрдВрдЧреЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдХреНрд░реЙрди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП:

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

рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдЬреАрдердм рдореЗрдВ рдЖрдк рдРрд╕реЗ рдЗрд╡реЗрдВрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗрдмрд╣реБрдХ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╡рд┐рд╡рд░рдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╣реИрдВ: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

рдЖрдЗрдП рдХрд░реНрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реНрдерд┐рддрд┐ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪреЗрдВ:

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"

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдиреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреА рд╣реИ, рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдпреВрдкреА рд╣реИ рдФрд░, рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ "рдЕрднрд┐рднреВрдд" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ 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 }}

рд╣рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рддрднреА рднреЗрдЬрддреЗ рд╣реИрдВ рдЬрдм рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдРрдкреНрдкрд▓рдмреЙрдп/рдЯреЗрд▓реАрдЧреНрд░рд╛рдо-рдПрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ; рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдмреЙрдЯ рдЯреЛрдХрди рдФрд░ рдЪреИрдЯ рдЖрдИрдбреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: github.com/appleboy/telegram-action

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдЬреАрдердм рдкрд░ рд░рд╣рд╕реНрдп рд▓рд┐рдЦрдирд╛ рди рднреВрд▓реЗрдВ: рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдпреВрдЖрд░рдПрд▓ рдФрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрдиред

рдмреЛрдирд╕ рдЯреНрд░реИрдХ - рдЖрд▓рд╕реА рдХреЗ рд▓рд┐рдП JIRA

рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рд╣рдо JIRA рдореЗрдВ рд▓реМрдЯреЗрдВрдЧреЗ, рдФрд░ рд╣рдо рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВред рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рд░ рдореИрдВрдиреЗ рд╕реНрдЯреИрдВрдб-рдЕрдк рдкрд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рджреЗрдЦреА рд╣реИ рдЬрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдПрдХ рдлреАрдЪрд░ рдмрдирд╛рдпрд╛, рдПрдХ рд╢рд╛рдЦрд╛ рдХрд╛ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореБрджреНрджреЗ рдХреЛ рдЬреЗрдЖрдИрдЖрд░рдП рдореЗрдВ рдЦреАрдВрдЪрдирд╛ рднреВрд▓ рдЧрдПред рдмреЗрд╢рдХ, рдЕрдЧрд░ рдпрд╣ рд╕рдм рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛, рддреЛ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛрддрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдЖрдИрдбреАрдИ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдмрд┐рдЯрдмрдХреЗрдЯ рдпрд╛ рдЧрд┐рдЯрд╣рдм рдореЗрдВ рдорд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬрд┐рд░рд╛ рдореЗрдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирдИ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ , рдХрднреА-рдХрднреА рджреЛрдмрд╛рд░рд╛ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рдЖрджрд┐ред рдЬрдм рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рдпрд╛рдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдмреЛрд░реНрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕реБрдмрд╣ рд╕реНрдЯреИрдВрдбрдЕрдк рдкрд░ рдЖрдкрдХреЛ рдЯрд╛рд╕реНрдХ рдмреЛрд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рдореЗрдВ GitHub рднреА рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛; рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЬрдм рд╣рдо рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдореБрджреНрджреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб_рд░рд┐рд╡реНрдпреВ рдХреЙрд▓рдо рдореЗрдВ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдмрд╕ рд╢рд╛рдЦрд╛ рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реИ:

[╨╕╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨░]-[╨╜╨╛╨╝╨╡╤А ╤В╨░╤Б╨║╨░]-╨╜╨░╨╖╨▓╨░╨╜╨╕╨╡

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреБрдВрдЬреА "GitHub Actions" GA рд╣реИ, рддреЛ GA-8-jira-bot GA-8 рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдЦрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЬреЗрдЖрдИрдЖрд░рдП рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдПрдЯрд▓рд╕рд┐рдпрди рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ, рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JIRA рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдПрдЯрд▓рд╕рд┐рдпрди/рдЧрдЬрд┐рд░рд╛-рд▓реЙрдЧрд┐рди

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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╣реА рдЪреАрдЬрд╝ рд▓рд┐рдЦрдиреА рдкрдбрд╝реА, рдХреНрдпреЛрдВрдХрд┐ рдПрдЯрд▓рд╕рд┐рдпрди рдХреА рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рдереА , рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдЧрд▓рдд рдерд╛ - рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╡рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╕рдордпред

рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╕рдордп рдХрд╛рд░реНрдп рдХреЛ "рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛" рдХреЙрд▓рдо рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдмрд╛рдХреА рд╣реИ:

  - 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 рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдЙрд╕реА рддрд░рд╣, рдЖрдк рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░реНрдпреЛрдВ рдФрд░ GitHub рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реЗ рдЕрдиреНрдп рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕рдм рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рдФрд░ рдирд┐рдпрдорд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рдпрджрд┐ рдЖрдк рдХреНрд▓рд╛рд╕рд┐рдХ DEVOPS рдЖрд░реЗрдЦ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ, рд╢рд╛рдпрдж рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣реЗрд▓реНрдк-рдбреЗрд╕реНрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрд╛рдЬрд╛рд░ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрджрд▓ рдЧрдИ рд╣реИ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд░рдХ рдХреЗ рдЪрдХреНрд░ (рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг)

рдкреЗрд╢реЗрд╡рд░реЛрдВ:

  • рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рдмрд╛рдЬрд╝рд╛рд░, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЗрдВ, рдЖрдк рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реАрдзреЗ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд▓реЗрдЦрдХ рдХреЛ рдПрдХ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдз рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЪрдпрди рдХрд░рдирд╛: рд▓рд┐рдирдХреНрд╕, рдореИрдХ рдУрдПрд╕, рд╡рд┐рдВрдбреЛрдЬрд╝ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╕реБрд╡рд┐рдзрд╛ рд╣реИред
  • Github рдкреИрдХреЗрдЬ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЪреАрдЬрд╝ рд╣реИ, рд╕рдВрдкреВрд░реНрдг рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрдл рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рдПрдХ рдпрд╛ рджреЛ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ рдФрд░ GitHub рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рд╣реИред рдирд┐рдГрд╢реБрд▓реНрдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕рдорд░реНрдерди рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓рд╛рдн рд╣реИред
  • GitHub рдмрд┐рд▓реНрдб рд▓реЙрдЧ рдореЗрдВ рд░рд╣рд╕реНрдп рдЫрд┐рдкрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдЯреЛрдХрди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдЕрдкрдиреЗ рд╕рднреА рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрднреА рднреА рд░рд╣рд╕реНрдп рдХреЛ рдЙрд╕рдХреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдпрд╛ред
  • рдУрдкрди рд╕реЛрд░реНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдГрд╢реБрд▓реНрдХ

рд╡рд┐рдкрдХреНрд╖:

  • рд╡рд╛рдИрдПрдордПрд▓, рдареАрдХ рд╣реИ, рдореИрдВ рдЙрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рдЖрдо рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ "рд╡рд╛рдИрдПрдордПрд▓ рдкреНрд░рд╛рд░реВрдк рдареАрдХ рдХрд░реЗрдВ" рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рдЖрдк рдХрд╣реАрдВ рдЯреИрдм рд░рдЦрдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рд▓рд╛рдЗрди рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЪрд╛рдВрджрд╛ рдФрд░ рд░реВрд▓рд░ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рдордиреЗ рдмреИрдардирд╛ рд╕рдмрд╕реЗ рд╕реБрдЦрдж рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИред
  • DEBUG, рдХрдорд┐рдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛, рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдЪрд▓рд╛рдирд╛, рдФрд░ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "рдЖрдкрдиреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ" рд╢реНрд░реЗрдгреА рдХрд╛ рд╣реИ; рдЖрдк рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ IDEA рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЖрджреА рд╣реИрдВ, рдЬрдм рдЖрдк рдХреБрдЫ рднреА рдбреАрдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ .
  • рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдбреЙрдХрд░ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдкрд░ рдЕрдкрдиреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реА рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдмреЗрд╢рдХ рдпрд╣ рд╕реНрд╡рд╛рдж рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬреЗрдПрд╕ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдФрд░ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рднрдВрдбрд╛рд░ рдпрд╣рд╛рдВ рд╣реИ: github.com/antkorwin/github-actions

рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд░реВрдВрдЧрд╛ рд░рд┐рдкреЛрд░реНрдЯ good рд╣рд╛рдЗрдЬреЗрдирдмрдЧ 2020 рдкрд╛рдЗрдЯрд░ рд╕рдореНрдореЗрд▓рди рдореЗрдВред рдореИрдВ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╕рдордп рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛ рдЬрд╛рдП, рдмрд▓реНрдХрд┐ рдЬрд╛рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рд░рд╣рд╕реНрдп рднреА рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛!

рд╕реНрд░реЛрдд: www.habr.com