GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

рдЬрд╛рд╡рд╛рдордзреНрдпреЗ рдкреНрд░рдХрд▓реНрдк рдмрд╛рдВрдзрдгреНрдпрд╛рд╕рд╛рдареА рдорд▓рд╛ рдЕрдиреЗрдХрджрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрд╛рдВрдзрд╛рд╡реА рд▓рд╛рдЧрддреЗ. рдХрд╛рд╣реАрд╡реЗрд│рд╛ рддреЗ рдУрдкрди рд╕реЛрд░реНрд╕ рдЕрд╕рддреЗ, рдХрд╛рд╣реАрд╡реЗрд│рд╛ рддреЗ рдирд╕рддреЗ. рдореА рдЕрд▓реАрдХрдбреЗрдЪ рдорд╛рдЭреЗ рдХрд╛рд╣реА рднрд╛рдВрдбрд╛рд░ рдЯреНрд░реЕрд╡реНрд╣рд┐рд╕-рд╕реАрдЖрдп рдЖрдгрд┐ рдЯреАрдорд╕рд┐рдЯреА рд╡рд░реВрди рдЧрд┐рдЯрд╣рдм рдНрдХреНрд╢рдирдордзреНрдпреЗ рд╣рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рдЖрдгрд┐ рддреНрдпрд╛рддреВрдирдЪ рдкреБрдвреЗ рдЖрд▓реЗ.

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

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

рддреБрдореНрд╣реА рдпреЗрдереЗ рд╕реНрд░реЛрдд рдкрд╛рд╣реВ рд╢рдХрддрд╛: github.com/antkorwin/github-actions рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрд╛рдВрдзрдгреНрдпрд╛рдЪреЗ рд╕рд░реНрд╡ рдЯрдкреНрдкреЗ рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдордзреНрдпреЗ рджрд┐рд╕реВрди рдпреЗрддрд╛рдд.

рдЬрд┐рд░рд╛ рдЖрдгрд┐ рдирд┐рдпреЛрдЬрди

рд╣реЗ рд╕рд╛рдВрдЧрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рдЖрдореНрд╣реА рд╕рд╣рд╕рд╛ JIRA рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реЕрдХрд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рддреЛ, рдореНрд╣рдгреВрди рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рдмреЛрд░реНрдб рддрдпрд╛рд░ рдХрд░реВ рдЖрдгрд┐ рддреЗрдереЗ рдкреНрд░рдердо рд╕рдорд╕реНрдпрд╛ рдЬреЛрдбреВ:

GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

рдереЛрдбреНрдпрд╛ рд╡реЗрд│рд╛рдиреЗ рдЖрдореНрд╣реА JIRA рдЖрдгрд┐ GitHub рдПрдХрддреНрд░рд┐рддрдкрдгреЗ рдХреЛрдгрддреНрдпрд╛ рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯреА рджреЗрдК рд╢рдХрддрд╛рдд рдпрд╛рд╡рд░ рдкрд░рдд рдпреЗрдК.

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

рдЖрдордЪрд╛ рдЪрд╛рдЪрдгреА рдкреНрд░рдХрд▓реНрдк рдореЕрд╡реЗрди рджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рддреЗ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд mvn рдХреНрд▓реАрди рдкреЕрдХреЗрдЬрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ.

рдЧрд┐рдердм рдНрдХреНрд╢рдиреНрд╕ рд╡рд╛рдкрд░реВрди рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рд╡рд░реНрдХрдлреНрд▓реЛрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░реА рдПрдХ рдлрд╛рдЗрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓, рд╣реЗ рдирд┐рдпрдорд┐рдд 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 тАФ рд╣реЗ рддреНрдпрд╛ рдЗрд╡реНрд╣реЗрдВрдЯрдЪреЗ рд╡рд░реНрдгрди рдЖрд╣реЗ рдЬреНрдпрд╛рд╡рд░ рдЖрдордЪреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдиреНрдЪ рдХреЗрд▓реА рдЬрд╛рдИрд▓.

рд╡рд░: рдкреБрд▓_рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ/рдкреБрд╢ тАФ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рдХреА рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдорд╛рд╕реНрдЯрд░рд▓рд╛ рдкреБрд╢ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рддреЗрд╡реНрд╣рд╛ рд╣рд╛ рд╡рд░реНрдХрдлреНрд▓реЛ рд▓реЙрдиреНрдЪ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдЦрд╛рд▓реАрд▓ рдХрд╛рд░реНрдпрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдЖрд╣реЗ (рд░реЛрдЬрдЧрд╛рд░) рдЖрдгрд┐ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреЗ рдЯрдкреНрдкреЗ (рдкрд╛рд╡рд▓реЗ) рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА.

рдЪрд╛рд▓реВ рдЖрд╣реЗ - рдпреЗрдереЗ рдЖрдореНрд╣реА рд▓рдХреНрд╖реНрдп рдУрдПрд╕ рдирд┐рд╡рдбреВ рд╢рдХрддреЛ, рдЖрд╢реНрдЪрд░реНрдпрд╛рдЪреА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ, рдЖрдкрдг рдореЕрдХ рдУрдПрд╕ рджреЗрдЦреАрд▓ рдирд┐рд╡рдбреВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рдЦрд╛рдЬрдЧреА рднрд╛рдВрдбрд╛рд░рд╛рдВрд╡рд░ рд╣реЗ рдЦреВрдк рдорд╣рд╛рдЧ рдЖрд╣реЗ (рд▓рд┐рдирдХреНрд╕рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд).

рд╡рд╛рдкрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдЗрддрд░ рдХреНрд░рд┐рдпрд╛рдВрдЪрд╛ рдкреБрдирд░реНрд╡рд╛рдкрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдиреБрдорддреА рджреЗрддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХреНрд░рд┐рдпрд╛/рд╕реЗрдЯрдЕрдк-рдЬрд╛рд╡рд╛ рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд░реВрди рдЖрдореНрд╣реА Java 11 рд╕рд╛рдареА рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ.

рдЪреНрдпрд╛ рдорджрддреАрдиреЗ рд╕рд╣ рдЖрдореНрд╣реА рдЬреНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рдХреНрд░рд┐рдпрд╛ рд▓рд╛рдБрдЪ рдХрд░рддреЛ рддреЗ рдЖрдореНрд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддреЛ, рдореВрд▓рдд: рд╣реЗ рд╡рд┐рддрд░реНрдХ рдЖрд╣реЗрдд рдЬреЗ рдХреНрд░рд┐рдпреЗрд▓рд╛ рджрд┐рд▓реЗ рдЬрд╛рддреАрд▓.

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

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>

рдЖрддрд╛ codecov рдмреЙрдЯ рдЖрдордЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реЗрд▓ рдЖрдгрд┐ рдХрд╡реНрд╣рд░реЗрдЬ рдмрджрд▓ рдЖрд▓реЗрдЦ рдЬреЛрдбреЗрд▓:

GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

рдЪрд▓рд╛ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЬреЛрдбреВрдпрд╛

рдорд╛рдЭреНрдпрд╛ рдмрд╣реБрддреЗрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕рдордзреНрдпреЗ рдореА рд╕реНрдЯреЕрдЯрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА рд╕реЛрдирд╛рд░ рдХреНрд▓рд╛рдЙрдб рд╡рд╛рдкрд░рддреЛ, рдЯреНрд░реЕрд╡реНрд╣рд┐рд╕-рд╕реАрдЖрдпрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рдореНрд╣рдгреВрди рддреЗрдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА GitHub рдХреНрд░рд┐рдпрд╛рдВрд╡рд░ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛рдирд╛ рд╣реА рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдкрд╛рдпрд░реА рдЖрд╣реЗ. рдЕтАНреЕрдХреНрд╢рди рдорд╛рд░реНрдХреЗрдЯ рд╣реА рдПрдХ рдорд╕реНрдд рдЧреЛрд╖реНрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдпрд╛рд╡реЗрд│реА рдорд▓рд╛ рдереЛрдбреЗ рдХрдореА рдХреЗрд▓реЗ, рдХрд╛рд░рдг рд╕рд╡рдпреАрдореБрд│реЗ рдорд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдХреГрддреА рд╕рд╛рдкрдбрд▓реА рдЖрдгрд┐ рддреА рд╡рд░реНрдХрдлреНрд▓реЛрдордзреНрдпреЗ рдЬреЛрдбрд▓реА. рдкрд░рдВрддреБ рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рд╕реЛрдирд╛рд░ рдорд╛рд╡реЗрди рдХрд┐рдВрд╡рд╛ рдЧреНрд░реЗрдбрд▓рд╡рд░реАрд▓ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреГрддреАрджреНрд╡рд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рдЕрд░реНрдерд╛рдд, рд╣реЗ рдХрд╛рдЧрджрдкрддреНрд░рд╛рдд рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рд╡рд╛рдЪрддреЗ рдХреЛрдг ?!

рдХреГрддреАрджреНрд╡рд╛рд░реЗ рд╣реЗ рд╢рдХреНрдп рдирд╛рд╣реА, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рддреЗ 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 }}

рдЖрддрд╛рдкрд╛рд╕реВрди рд╕рд░реНрд╡ рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛ рдЖрдкреЛрдЖрдк рд░рд┐рд▓реАрдЭ рдиреЛрдЯреНрд╕рдордзреНрдпреЗ рдЧреЛрд│рд╛ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓ - рдЬрд╛рджреВ!

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

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

рдорд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдПрдХрд╛рдЪ рдард┐рдХрд╛рдгреА рдареЗрд╡рдгреНрдпрд╛рдЪрд╛ рдкрд░реНрдпрд╛рдп рдЖрд╡рдбрд▓рд╛, рдореНрд╣рдгреВрди рдЧрд┐рдЯрд╣рдм рдкреЕрдХреЗрдЬреЗрд╕рдордзреНрдпреЗ рдХрд╕реЗ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВрдпрд╛ (рд╣реЗ рдмрд╛рдпрдирд░реА рд╕рд╛рдордЧреНрд░реА, рдПрдирдкреАрдПрдо, рдЬрд╛рд░, рдбреЙрдХрд░рд╕рд╛рдареА рдПрдХ рднрд╛рдВрдбрд╛рд░ рдЖрд╣реЗ).

рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЧрд┐рдЯрд╣рдм рдкреЕрдХреЗрдЬреЗрд╕рдордзреНрдпреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

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 рд╣рд╛ рд╣реЕрд╢рд╢реА рдЬреБрд│рдд рдирд╛рд╣реА рдЬреЛ рдЖрдкрдг рдЧрд┐рдЯ рдЗрддрд┐рд╣рд╛рд╕рд╛рдд рдкрд╛рд╣рддреЛ, рдХрд╛рд░рдг рдХреНрд░рд┐рдпрд╛/рдЪреЗрдХрдЖрдЙрдЯ рдХреНрд░рд┐рдпрд╛ PR рдордзреНрдпреЗ рдбреЗрдбрд▓реЙрдХрд┐рдВрдЧ рдХреНрд░рд┐рдпрд╛ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдГрдЪреЗ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЕрд╢ рдмрдирд╡рддреЗ.

GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

рдЬрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЪрд╛рд▓рд▓реЗ рдЕрд╕реЗрд▓, рддрд░ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдкреЕрдХреЗрдЬреЗрд╕ рд╡рд┐рднрд╛рдЧ (https://github.com/antkorwin/github-actions/packages) рдЙрдШрдбрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдирд╡реАрди рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рджрд┐рд╕реЗрд▓:

GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

рддреЗрдереЗ рдЖрдкрдг рдбреЙрдХрд░ рдкреНрд░рддрд┐рдореЗрдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдЪреА рд╕реВрдЪреА рджреЗрдЦреАрд▓ рдкрд╛рд╣реВ рд╢рдХрддрд╛.

рдпрд╛ рдиреЛрдВрджрдгреАрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрдгрд┐ рд╕реЗрд╡рд╛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреЗ рд╣реЗ рдмрд╛рдХреА рдЖрд╣реЗ. рдореА рдХрджрд╛рдЪрд┐рдд рджреБрд╕рд░реНтАНрдпрд╛ рд╡реЗрд│реА systemd рджреНрд╡рд╛рд░реЗ рд╣реЗ рдХрд╕реЗ рдХрд░рд╛рд╡реЗ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓реЗрди.

рджреЗрдЦрд░реЗрдЦ

GitHub рдХреНрд░рд┐рдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЖрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреА рдХрд╢реА рдХрд░рд╛рдпрдЪреА рдпрд╛рдЪрд╛ рдПрдХ рд╕реЛрдкрд╛ рдкрд░реНрдпрд╛рдп рдкрд╛рд╣реВ. рдЖрдордЪреНрдпрд╛ рдмреВрдЯ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ рдПрдХ рдЕреЕрдХреНрдЯреНрдпреБрдПрдЯрд░ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдЪреА рд╕реНрдерд┐рддреА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдПрдкреАрдЖрдп рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА; рдЖрд│рд╢реАрдВрд╕рд╛рдареА рдЖрдореНрд╣реА рдЖрдзреАрдЪ рд╕рд░реНрд╡рдХрд╛рд╣реА рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рд╣реЛрд╕реНрдЯ рдЦреЗрдЪрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ: 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"

рдкреНрд░рдердо, рд╕рд░реНрд╡реНрд╣рд░рдиреЗ рд╡рд┐рдирдВрддреАрд▓рд╛ рдХрд╛рдп рдкреНрд░рддрд┐рд╕рд╛рдж рджрд┐рд▓рд╛ рддреЗ рдЖрдореНрд╣реА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░рддреЛ, рдкреБрдвреАрд▓ рдЪрд░рдгрд╛рдд рдЖрдореНрд╣реА рд╕реНрдерд┐рддреА 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 }}

рдорд╛рдЧреАрд▓ рдкрд╛рдпрд░реАрд╡рд░ рдХреНрд░рд┐рдпрд╛ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕рдЪ рдЖрдореНрд╣реА рдЯреЗрд▓реАрдЧреНрд░рд╛рдорд╡рд░ рдкрд╛рдард╡рддреЛ. рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдНрдкрд▓рдмреЙрдп/рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо-рдНрдХреНрд╢рди рд╡рд╛рдкрд░рддреЛ; рдЖрдкрдг рджрд╕реНрддрдРрд╡рдЬрд╛рдд рдмреЙрдЯ рдЯреЛрдХрди рдЖрдгрд┐ рдЪреЕрдЯ рдЖрдпрдбреА рдХрд╕рд╛ рдорд┐рд│рд╡рд╛рд╡рд╛ рдпрд╛рдмрджреНрджрд▓ рд╡рд╛рдЪреВ рд╢рдХрддрд╛: github.com/appleboy/telegram-action

GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

Github рд╡рд░ рд░рд╣рд╕реНрдпреЗ рд▓рд┐рд╣рд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░реВ рдирдХрд╛: рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА URL рдЖрдгрд┐ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдмреЙрдЯрд╕рд╛рдареА рдЯреЛрдХрди.

рдмреЛрдирд╕ рдЯреНрд░реЕрдХ - рдЖрд│рд╢реАрдВрд╕рд╛рдареА JIRA

рдореА рд╡рдЪрди рджрд┐рд▓реЗ рд╣реЛрддреЗ рдХреА рдЖрдореНрд╣реА JIRA рдордзреНрдпреЗ рдкрд░рдд рдпреЗрдК рдЖрдгрд┐ рдЖрдореНрд╣реА рдкрд░рдд рдЖрд▓реЛ. рдореА рд╢реЗрдХрдбреЛ рд╡реЗрд│рд╛ рд╕реНрдЯрдБрдб-рдЕрдкрдордзреНрдпреЗ рдЕрд╢реА рдкрд░рд┐рд╕реНрдерд┐рддреА рдкрд╛рд╣рд┐рд▓реА рдЖрд╣реЗ рдЬреЗрд╡реНрд╣рд╛ рдбреЗрд╡реНрд╣рд▓рдкрд░рдиреЗ рдПрдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдмрдирд╡рд▓реЗ, рд╢рд╛рдЦрд╛ рд╡рд┐рд▓реАрди рдХреЗрд▓реА, рдкрд░рдВрддреБ рд╕рдорд╕реНрдпрд╛ JIRA рдордзреНрдпреЗ рдбреНрд░реЕрдЧ рдХрд░рдгреНрдпрд╛рд╕ рд╡рд┐рд╕рд░рд▓реЛ. рдЕрд░реНрдерд╛рдд, рд╣реЗ рд╕рд░реНрд╡ рдПрдХрд╛рдЪ рдард┐рдХрд╛рдгреА рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рд╕реЛрдкреЗ рд╣реЛрдИрд▓, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЖрдкрдг IDE рдордзреНрдпреЗ рдХреЛрдб рд▓рд┐рд╣рд┐рддреЛ, рд╢рд╛рдЦрд╛рдВрдирд╛ рдмрд┐рдЯрдмрдХреЗрдЯ рдХрд┐рдВрд╡рд╛ рдЧрд┐рдЯрд╣рдмрдордзреНрдпреЗ рд╡рд┐рд▓реАрди рдХрд░рддреЛ рдЖрдгрд┐ рдирдВрддрд░ рдХрд╛рд░реНрдпреЗ рдЬрд┐рд░рд╛рдордзреНрдпреЗ рдбреНрд░реЕрдЧ рдХрд░рддреЛ, рдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдирд╡реАрди рд╡рд┐рдВрдбреЛ рдЙрдШрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. , рдХрдзреА рдХрдзреА рдкреБрдиреНрд╣рд╛ рд▓реЙрдЧ рдЗрди рдХрд░рд╛ рдЖрдгрд┐ рдЗ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреБрдвреЗ рдХрд╛рдп рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рд╣реЗ рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреВрд░реНрдгрдкрдгреЗ рдЖрдард╡рддреЗ, рддреЗрд╡реНрд╣рд╛ рдкреБрдиреНрд╣рд╛ рдмреЛрд░реНрдб рдЙрдШрдбрдгреНрдпрд╛рдд рдХрд╛рд╣реА рдЕрд░реНрде рдирд╛рд╣реА. рдкрд░рд┐рдгрд╛рдореА, рд╕рдХрд╛рд│реА рд╕реНрдЯрдБрдбрдЕрдкрд╡рд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЯрд╛рд╕реНрдХ рдмреЛрд░реНрдб рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рдд рд╡реЗрд│ рдШрд╛рд▓рд╡рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓.

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

рддреБрдореНрд╣реА рдЧрд┐рдЯрд╣рдм рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕рдордзреНрдпреЗ рд╢реЛрдзрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдкрдбреЗрд▓, рдкрд░рдВрддреБ рдорд▓рд╛ рд╢рд╛рдЦреЗрдЪреЗ рдирд╛рд╡ рд╡рд╛рдкрд░реВрди grep рд╡рд╛рдкрд░реВрди рддреАрдЪ рдЧреЛрд╖реНрдЯ рд▓рд┐рд╣рд╛рд╡реА рд▓рд╛рдЧрд▓реА, рдХрд╛рд░рдг Atlassian рдЪреА рд╣реА рдХреНрд░рд┐рдпрд╛ рдорд╛рдЭреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░реЗ рдХрд╛рдо рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА. , рддреЗрдереЗ рдХрд╛рдп рдЪреВрдХ рдЖрд╣реЗ рд╣реЗ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА - рдЖрдкрд▓реНрдпрд╛ рд╣рд╛рддрд╛рдВрдиреА рд╕рдорд╛рди рдЧреЛрд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд╛рд│.

рдкреБрд▓ рд╡рд┐рдирдВрддреА рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдХрд╛рд░реНрдп "рдХреЛрдб рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди" рд╕реНрддрдВрднрд╛рдд рд╣рд▓рд╡рд┐рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ:

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

рдпрд╛рд╕рд╛рдареА GitHub рд╡рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗ, рддреНрдпрд╛рд╕рд╛рдареА рдЖрдзреАрдЪреНрдпрд╛ рдкрд╛рдпрд░реАрдордзреНрдпреЗ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓рд╛ рдЗрд╢реНрдпреВ рдЖрдпрдбреА рдЖрдгрд┐ рдЖрдореНрд╣реА рд╡рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ JIRA рдордзреАрд▓ рдЕрдзрд┐рдХреГрддрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

рддреНрдпрд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ, рддреБрдореНрд╣реА рдорд╛рд╕реНрдЯрд░рдордзреНрдпреЗ рд╡рд┐рд▓реАрди рд╣реЛрддрд╛рдирд╛ рдХрд╛рд░реНрдпреЗ рдЖрдгрд┐ GitHub рд╡рд░реНрдХрдлреНрд▓реЛрдордзреАрд▓ рдЗрддрд░ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕ рдбреНрд░реЕрдЧ рдХрд░реВ рд╢рдХрддрд╛. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣реЗ рд╕рд░реНрд╡ рдЖрдкрд▓реНрдпрд╛ рдХрд▓реНрдкрдиреЗрд╡рд░ рдЖрдгрд┐ рдирд┐рдпрдорд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЗрдЪреНрдЫреЗрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ.

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

рддреБрдореНрд╣реА рдХреНрд▓рд╛рд╕рд┐рдХ DEVOPS рдЖрдХреГрддреА рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдЯрдкреНрдкреЗ рдХрд╡реНрд╣рд░ рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рдХрджрд╛рдЪрд┐рдд рдСрдкрд░реЗрдЯ рдХрд░рдгреЗ рд╡рдЧрд│рддрд╛, рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рддреБрдореНрд╣реА рдкреНрд░рдпрддреНрди рдХреЗрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗрд▓реНрдк-рдбреЗрд╕реНрдХ рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рдПрдХрддреНрд░реАрдХрд░рдгрд╛рд╕рд╛рдареА рдмрд╛рдЬрд╛рд░рд╛рдд рдХрд╛рд╣реА рдХреГрддреА рд╕рд╛рдкрдбрддреАрд▓, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╡рд│рд▓реА рдЖрд╣реЗ. рд╕рдЦреЛрд▓ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдврд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдирд░рдХрд╛рдЪреА рдордВрдбрд│реЗ (рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреЗ)

рд╕рд╛рдзрдХ:

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

рдмрд╛рдзрдХ

  • YML, рдареАрдХ рдЖрд╣реЗ, рдорд▓рд╛ рддреЛ рдЖрд╡рдбрдд рдирд╛рд╣реА. рдЕрд╢рд╛ рдкреНрд░рд╡рд╛рд╣рд╛рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рддрд╛рдирд╛, рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдХрдорд┐рдЯ рдореЗрд╕реЗрдЬ рдЖрд╣реЗ тАЬрдлрд┐рдХреНрд╕ yml рдлреЙрд░рдореЕрдЯтАЭ, рдирдВрддрд░ рддреБрдореНрд╣реА рдХреБрдареЗрддрд░реА рдЯреЕрдм рдЯрд╛рдХрд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░рд▓рд╛рдд рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рдЪреБрдХреАрдЪреНрдпрд╛ рдУрд│реАрд╡рд░ рд▓рд┐рд╣рд┐рддрд╛. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдкреНрд░реЛрдЯреНрд░реЗрдХреНрдЯрд░ рдЖрдгрд┐ рд╢рд╛рд╕рдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реНрдХреНрд░реАрдирд╕рдореЛрд░ рдмрд╕рдгреЗ рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рдЖрдирдВрджрджрд╛рдпреА рдЕрдиреБрднрд╡ рдирд╛рд╣реА.
  • рдбреАрдмрдЧ, рдХрдорд┐рдЯрд╕рд╣ рдкреНрд░рд╡рд╛рд╣ рдбреАрдмрдЧ рдХрд░рдгреЗ, рдкреБрдирд░реНрдмрд╛рдВрдзрдгреА рдЪрд╛рд▓рд╡рдгреЗ рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓рд╡рд░ рдЖрдКрдЯрдкреБрдЯ рдХрд░рдгреЗ рд╣реЗ рдиреЗрд╣рдореАрдЪ рд╕реЛрдпреАрдЪреЗ рдирд╕рддреЗ, рдкрд░рдВрддреБ рд╣реЗ "рддреБрдореНрд╣реА рдУрд╡реНрд╣рд░рдбрди рдХреЗрд▓реЗ" рд╢реНрд░реЗрдгреАрдЪреЗ рдЕрдзрд┐рдХ рдЖрд╣реЗ; рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реЛрдпреАрд╕реНрдХрд░ IDEA рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреА рд╕рд╡рдп рдЖрд╣реЗ, рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдХрд╛рд╣реАрд╣реА рдбреАрдмрдЧ рдХрд░реВ рд╢рдХрддрд╛. .
  • рддреБрдореНрд╣реА рддреБрдордЪреА рдХреГрддреА рдбреЙрдХрд░рдордзреНрдпреЗ рдЧреБрдВрдбрд╛рд│рд▓реНрдпрд╛рд╕ рддреНрдпрд╛рд╡рд░ рд▓рд┐рд╣реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рдХреЗрд╡рд│ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓рд╛ рдореВрд│ рдЖрдзрд╛рд░ рдЖрд╣реЗ, рдЕрд░реНрдерд╛рдд рд╣реА рдЪрд╡реАрдЪреА рдмрд╛рдм рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореА js рдРрд╡рдЬреА рджреБрд╕рд░реЗ рдХрд╛рд╣реАрддрд░реА рдкрд╕рдВрдд рдХрд░реЗрди.

рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ рдХреА рд╕рд░реНрд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╕рд╣ рднрд╛рдВрдбрд╛рд░ рдпреЗрдереЗ рдЖрд╣реЗ: github.com/antkorwin/github-actions

рдкреБрдврдЪреНрдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдд рдореА рд╕реЛрдмрдд рдкрд░рдлреЙрд░реНрдо рдХрд░рдгрд╛рд░ рдЖрд╣реЗ рдЕрд╣рд╡рд╛рд▓ Heisenbug 2020 Piter рдкрд░рд┐рд╖рджреЗрдд. рдЪрд╛рдЪрдгреА рдбреЗрдЯрд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдЪреБрдХрд╛ рдХрд╢рд╛ рдЯрд╛рд│рд╛рд╡реНрдпрд╛рдд рд╣реЗ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдВрдЧреЗрди, рддрд░ Java рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдбреЗрдЯрд╛ рд╕реЗрдЯрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреЗ рдорд╛рдЭреЗ рд░рд╣рд╕реНрдп рджреЗрдЦреАрд▓ рд╕рд╛рдВрдЧреЗрди!

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