GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

рдореИрд▓реЗ рдкреНрд░рд╛рдп: рдЬрд╛рднрд╛рдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБрдкрд░реНрдЫред рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдпреЛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реЛ, рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдВ рдпреЛ рд╣реЛрдЗрдиред рдореИрд▓реЗ рднрд░реНрдЦрд░реИ рдореЗрд░рд╛ рдХреЗрд╣реА рднрдгреНрдбрд╛рд░рд╣рд░реВ Travis-CI рд░ TeamCity рдмрд╛рдЯ GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рд╕рд╛рд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗ, рд░ рдпреЛ рдпрд╕рдмрд╛рдЯ рдмрд╛рд╣рд┐рд░ рдЖрдПрдХреЛ рд╣реЛред

рд╣рд╛рдореА рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реБрдиреЗрдЫ?

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

рддрдкрд╛рдИрдВ рдпрд╣рд╛рдБ рд╕реНрд░реЛрддрд╣рд░реВ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: github.com/antkorwin/github-actions рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдгрдХреЛ рд╕рдмреИ рдЪрд░рдгрд╣рд░реВ рдпрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рд╣реБрдиреНрдЫрдиреНред

JIRA рд░ рдпреЛрдЬрдирд╛

рдпреЛ рднрдиреНрди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рд╣рд╛рдореА рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ JIRA рд▓рд╛рдИ рдореБрджреНрджрд╛ рдЯреНрд░реНрдпрд╛рдХрд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рдмреЛрд░реНрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ рд░ рддреНрдпрд╣рд╛рдБ рдкрд╣рд┐рд▓реЛ рдореБрджреНрджрд╛рд╣рд░реВ рдердкреМрдВ:

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

рдХреЗрд╣рд┐ рд╕рдордп рдкрдЫрд┐ рд╣рд╛рдореА JIRA рд░ GitHub рд▓реЗ рд╕рдВрдпреЛрдЬрдирдорд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрди рд╕рдХреНрдиреЗ рд░реЛрдЪрдХ рдЪреАрдЬрд╣рд░реВрдорд╛ рдлрд░реНрдХрдиреЗрдЫреМрдВред

рд╣рд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд

рд╣рд╛рдореНрд░реЛ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ maven рдорд╛рд░реНрдлрдд рдмрдирд╛рдЗрдПрдХреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдирд┐рд░реНрдорд╛рдг рдПрдХрджрдо рд╕рд░рд▓ рдЫ, рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдПрдХреЛ рдорд╛рддреНрд░ mvn рд╕рдлрд╛ рдкреНрдпрд╛рдХреЗрдЬ рд╣реЛред

Github рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рднрдгреНрдбрд╛рд░рдорд╛ рдПрдЙрдЯрд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдпреЛ рдирд┐рдпрдорд┐рдд 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 тАФ рдпреЛ рдШрдЯрдирд╛рдХреЛ рд╡рд┐рд╡рд░рдг рд╣реЛ рдЬрд╕рдорд╛ рд╣рд╛рдореНрд░реЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд░реБ рд╣реБрдиреЗрдЫред

рдорд╛: рдкреБрд▓_рдЕрдиреБрд░реЛрдз/рдкреБрд╢ - рдпреЛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рдорд╛рд╕реНрдЯрд░рдорд╛ рдкреБрд╢ рдЧрд░реНрджрд╛ рд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗрд░ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫред

рдирд┐рдореНрди рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдг рдЫ (рдЬрдм) рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрд░рдгрд╣рд░реВ (рдХрджрдордкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ред

рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ - рдпрд╣рд╛рдБ рд╣рд╛рдореА рд▓рдХреНрд╖рд┐рдд OS рдЪрдпрди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдкрдорд╛, рддрдкрд╛рдИрдВ рдкрдирд┐ Mac OS рдЪрдпрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд░ рдирд┐рдЬреА рднрдгреНрдбрд╛рд░рд╣рд░реВрдорд╛ рдпреЛ рдзреЗрд░реИ рдорд╣рдБрдЧреЛ рдЫ (рд▓рд┐рдирдХреНрд╕рдХреЛ рддреБрд▓рдирд╛рдорд╛)ред

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

рд╕рд╣рдпреЛрдЧрдХреЛ рд╕рд╛рде рд╕рдВрдЧ рд╣рд╛рдореА рдорд╛рдкрджрдгреНрдбрд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдЬрд╕рдХреЛ рд╕рд╛рде рд╣рд╛рдореАрд▓реЗ рдХрд╛рд░реНрдп рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛ рдпреА рддрд░реНрдХрд╣рд░реВ рд╣реБрдиреН рдЬреБрди рдХрд╛рд░реНрдпрдорд╛ рдкрдард╛рдЗрдиреЗрдЫред

рдорд╛рднреЗрдирдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг рдЪрд▓рд╛рдЙрди рдмрд╛рдБрдХреА рд░рд╣реЗрдХреЛ рдЫ: run: mvn -B clean package рдЭрдгреНрдбрд╛ -B рднрдиреНрдЫ рдХрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдПрдХ рдЧреИрд░-рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореЛрдб рдЪрд╛рд╣рд┐рдиреНрдЫ рддрд╛рдХрд┐ maven рдЕрдЪрд╛рдирдХ рд╣рд╛рдореАрд▓рд╛рдИ рдХреЗрд╣рд┐ рд╕реЛрдзреНрди рдЪрд╛рд╣рдБрджреИрдиред

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

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

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

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

рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдХрднрд░ рдЧрд░реНрди, рдо jacoco рдкреНрд▓рдЧрдЗрдирдХреЛ рд╕рдВрдпреЛрдЬрдирдорд╛ codecov рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБред codecov рдХреЛ рдЖрдлреНрдиреИ рдХрд╛рд░реНрдп рдЫ, рддрд░ рдпрд╕рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрди рдЯреЛрдХрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

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

рддрдкрд╛рдИрдВ GitHub рдорд╛ рднрдгреНрдбрд╛рд░ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╣рд░реВ рдердкреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

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

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

POM рдлрд╛рдЗрд▓рдорд╛ jacoco рдкреНрд▓рдЧрдЗрди рдердкреНрдиреБрд╣реЛрд╕реН:

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

Dsonar.projectKey - рд╕реЛрдирд╛рд░рдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдирд╛рдо, рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

Dsonar.organization - 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 }}

рдЕрдм рджреЗрдЦрд┐ рд╕рдмреИ рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд░рд┐рд▓реАрдЬ рдиреЛрдЯрд╣рд░реВрдорд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдиреЗрдЫ - рдЬрд╛рджреВ!

рдпрд╣рд╛рдБ рдкреНрд░рд╢реНрди рдЙрдареНрди рд╕рдХреНрдЫ: рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ 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 рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд╕реНрд╡рдд: рдПрдиреЛрдЯреЗрд╕рди

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

  • рдПрдЙрдЯрд╛ рдирд┐рд░реНрдорд╛рдг рдЬрд╕реНрддреИ: 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 рд▓реЗ рд╣рд╛рдореАрд▓реЗ git рдЗрддрд┐рд╣рд╛рд╕рдорд╛ рджреЗрдЦреЗрдХреЛ рд╣реНрдпрд╛рд╕рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдБрджреИрди, рдХрд┐рдирднрдиреЗ рдХрд╛рд░реНрдп/рдЪреЗрдХрдЖрдЙрдЯ рдХрд╛рд░реНрдпрд▓реЗ PR рдорд╛ рдбреЗрдбрд▓рдХ рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВрдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрдлреНрдиреИ рдЕрджреНрд╡рд┐рддреАрдп рд╣реНрдпрд╛рд╕ рдмрдирд╛рдЙрдБрдЫред

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

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

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

рддреНрдпрд╣рд╛рдБ рддрдкрд╛рдЗрдБ рдбрдХрд░ рдЫрд╡рд┐рдХреЛ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкрдирд┐ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдпреЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрди рд░ рд╕реЗрд╡рд╛ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рд╣рд╛рдореНрд░реЛ рд╕рд░реНрднрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдмрд╛рдБрдХреА рдЫред рдо рд╕рд╛рдпрдж рдЕрд░реНрдХреЛ рдкрдЯрдХ systemd рдорд╛рд░реНрдлрдд рдпреЛ рдХрд╕рд░реА рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреБред

рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджреИ

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

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

рдкрд╣рд┐рд▓реЗ, рдХреНрд░реЛрди рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдХрд╕рд░реА рдЪрд▓рд╛рдЙрдиреЗ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реН:

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

рдпреЛ рд╕рд░рд▓ рдЫ, рдо рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрди рд╕рдХреНрджрд┐рди рдХрд┐ Github рдорд╛ рддрдкрд╛рдЗрдБ рдШрдЯрдирд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рд╡реЗрдмрд╣реБрдХрд╣рд░реВрдорд╛ рдлрд┐рдЯ рд╣реБрдБрджреИрдиред рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдХрд╛рдЧрдЬрд╛рддрдорд╛ рдЫрдиреН: 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"

рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореА рд╕рд░реНрднрд░рд▓реЗ рдЕрдиреБрд░реЛрдзрдорд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдПрдХреЛ рднреНрдпрд╛рд░реАрдПрдмрд▓рдорд╛ рдмрдЪрдд рдЧрд░реНрдЫреМрдВ, рдЕрд░реНрдХреЛ рдЪрд░рдгрдорд╛ рд╣рд╛рдореА рд╕реНрдерд┐рддрд┐ 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 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ; рддрдкрд╛рдЗрдБ рдХрд╛рдЧрдЬрд╛рддрдорд╛ рдмреЛрдЯ рдЯреЛрдХрди рд░ рдЪреНрдпрд╛рдЯ рдЖрдИрдбреА рдХрд╕рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: github.com/appleboy/telegram-action

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

Github рдорд╛ рдЧреЛрдкреНрдп рд▓реЗрдЦреНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН: рд╕рд░реНрднрд░рдХреЛ рд▓рд╛рдЧрд┐ URL рд░ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдмреЛрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдЯреЛрдХрдиред

рдмреЛрдирд╕ рдЯреНрд░реНрдпрд╛рдХ - рдЕрд▓реНрдЫреА рд▓рд╛рдЧрд┐ JIRA

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

GitHub рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдпреЛ рджрд┐рдирдЪрд░реНрдпрд╛ рдХрд╛рд░реНрдпрдорд╛ рдкрдирд┐ рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ; рд╢реБрд░реБрд╡рд╛рддрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкреЗрд╢ рдЧрд░реНрджрд╛ рд╣рд╛рдореА рд╕рдорд╕реНрдпрд╛рд╣рд░реВрд▓рд╛рдИ рд╕реНрд╡рддрдГ code_review рд╕реНрддрдореНрднрдорд╛ рдбреНрд░реНрдпрд╛рдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рддрдкрд╛рдИрд▓реЗ рдЧрд░реНрдиреБ рдкрд░реНрдиреЗ рднрдиреЗрдХреЛ рд╢рд╛рдЦрд╛ рдирд╛рдордХрд░рдг рдХрдиреНрднреЗрдиреНрд╕рди рдкрд╛рд▓рдирд╛ рдЧрд░реНрдиреБ рд╣реЛ:

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

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

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

рдкрд╣рд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 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 рдорд╛ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдЫ, рдпрд╕рд▓рд╛рдИ рдЕрдШрд┐рд▓реНрд▓реЛ рдЪрд░рдгрдорд╛ рдкреНрд░рд╛рдкреНрдд рдореБрджреНрджрд╛ ID рд░ рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдЧрд░реЗрдХреЛ JIRA рдорд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЪрд╛рд╣рд┐рдиреНрдЫред

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

рддреНрдпрд╕реИ рдЧрд░реА, рддрдкрд╛рдИрдВ рдорд╛рд╕реНрдЯрд░рдорд╛ рдорд░реНрдЬ рдЧрд░реНрджрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдбреНрд░реНрдпрд╛рдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ GitHub рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣рдмрд╛рдЯ рдЕрдиреНрдп рдШрдЯрдирд╛рд╣рд░реВред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдпреЛ рд╕рдмреИ рддрдкрд╛рдЗрдБрдХреЛ рдХрд▓реНрдкрдирд╛ рд░ рджрд┐рдирдЪрд░реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реБ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрди рдЗрдЪреНрдЫрд╛ рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред

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

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

GitHub рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдирд░рдХрдХреЛ рд╕рд░реНрдХрд▓рд╣рд░реВ (рдЬрд╛рднрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ)

рдкреНрд░реЛ:

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

Cons:

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

рдорд▓рд╛рдИ рд╕рдореНрдЭрд╛рдЙрди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕рдмреИ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рднрдгреНрдбрд╛рд░ рдпрд╣рд╛рдБ рдЫ: github.com/antkorwin/github-actions

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

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