рдЬрд╛рд╡рд╛рдордзреНрдпреЗ рдкреНрд░рдХрд▓реНрдк рдмрд╛рдВрдзрдгреНрдпрд╛рд╕рд╛рдареА рдорд▓рд╛ рдЕрдиреЗрдХрджрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрд╛рдВрдзрд╛рд╡реА рд▓рд╛рдЧрддреЗ. рдХрд╛рд╣реАрд╡реЗрд│рд╛ рддреЗ рдУрдкрди рд╕реЛрд░реНрд╕ рдЕрд╕рддреЗ, рдХрд╛рд╣реАрд╡реЗрд│рд╛ рддреЗ рдирд╕рддреЗ. рдореА рдЕрд▓реАрдХрдбреЗрдЪ рдорд╛рдЭреЗ рдХрд╛рд╣реА рднрд╛рдВрдбрд╛рд░ рдЯреНрд░реЕрд╡реНрд╣рд┐рд╕-рд╕реАрдЖрдп рдЖрдгрд┐ рдЯреАрдорд╕рд┐рдЯреА рд╡рд░реВрди рдЧрд┐рдЯрд╣рдм рдНрдХреНрд╢рдирдордзреНрдпреЗ рд╣рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рдЖрдгрд┐ рддреНрдпрд╛рддреВрдирдЪ рдкреБрдвреЗ рдЖрд▓реЗ.
рдЖрдореНрд╣реА рдХрд╛рдп рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░реВ?
рдкреНрд░рдердо, рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдкреНрд░рдХрд▓реНрдк рд╣рд╡рд╛ рдЖрд╣реЗ рдЬреЛ рдЖрдореНрд╣реА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░реВ, рдЪрд▓рд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ / Java 11 / Maven рдордзреНрдпреЗ рдПрдХ рдЫреЛрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд░реВрдпрд╛. рдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╣реЗрддреВрдВрд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХрдордзреНрдпреЗ рдЕрдЬрд┐рдмрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рдирд╛рд╣реА; рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рд╕рднреЛрд╡рддрд╛рд▓рдЪреА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзрд╛ REST API рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреБрд░реЗрд╕рд╛ рдЕрд╕реЗрд▓.
рддреБрдореНрд╣реА рдпреЗрдереЗ рд╕реНрд░реЛрдд рдкрд╛рд╣реВ рд╢рдХрддрд╛:
рдЬрд┐рд░рд╛ рдЖрдгрд┐ рдирд┐рдпреЛрдЬрди
рд╣реЗ рд╕рд╛рдВрдЧрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рдЖрдореНрд╣реА рд╕рд╣рд╕рд╛ JIRA рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реЕрдХрд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рддреЛ, рдореНрд╣рдгреВрди рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рдмреЛрд░реНрдб рддрдпрд╛рд░ рдХрд░реВ рдЖрдгрд┐ рддреЗрдереЗ рдкреНрд░рдердо рд╕рдорд╕реНрдпрд╛ рдЬреЛрдбреВ:
рдереЛрдбреНрдпрд╛ рд╡реЗрд│рд╛рдиреЗ рдЖрдореНрд╣реА 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 рдореНрд╣рдгрддрд╛рдд рдХреА рдЖрдореНрд╣рд╛рд▓рд╛ рдиреЙрди-рдЗрдВрдЯрд░реЕрдХреНрдЯрд┐рд╡реНрд╣ рдореЛрдбрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рдорд╛рд╡реЗрди рдЕрдЪрд╛рдирдХ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реАрддрд░реА рд╡рд┐рдЪрд╛рд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА
рдЫрд╛рди! рдЖрддрд╛, рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдорд╛рд╕реНрдЯрд░рд▓рд╛ рд╡рдЪрдирдмрджреНрдз рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛, рдкреНрд░рдХрд▓реНрдкрд╛рдЪреА рдмрд╛рдВрдзрдгреА рд╕реБрд░реВ рд╣реЛрддреЗ.
рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЪрд╛рдЪрдгреА рд▓рд╛рдБрдЪ
рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЪрд╛рдВрдЧрд▓реА рдЖрд╣реЗ, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдПрдХ рдкреНрд░рдХрд▓реНрдк рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рдПрдХрддреНрд░ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдкрд░рдВрддреБ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рдореНрд╣рдгреВрди, рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рдЪрд╛рдЪрдгреА рдзрд╛рд╡рд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА 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 рд╡рд░ рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рд╕рд┐рдХреНрд░реЗрдЯреНрд╕рдордзреНрдпреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЬреЛрдбреВ рд╢рдХрддрд╛:
рдпреЗрдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЛрдХрди рдорд┐рд│реВ рд╢рдХрддреЗ
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 рдХреНрд░рд┐рдпрд╛рдВрд╡рд░ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛рдирд╛ рд╣реА рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдкрд╛рдпрд░реА рдЖрд╣реЗ. рдЕтАНреЕрдХреНрд╢рди рдорд╛рд░реНрдХреЗрдЯ рд╣реА рдПрдХ рдорд╕реНрдд рдЧреЛрд╖реНрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдпрд╛рд╡реЗрд│реА рдорд▓рд╛ рдереЛрдбреЗ рдХрдореА рдХреЗрд▓реЗ, рдХрд╛рд░рдг рд╕рд╡рдпреАрдореБрд│реЗ рдорд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдХреГрддреА рд╕рд╛рдкрдбрд▓реА рдЖрдгрд┐ рддреА рд╡рд░реНрдХрдлреНрд▓реЛрдордзреНрдпреЗ рдЬреЛрдбрд▓реА. рдкрд░рдВрддреБ рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рд╕реЛрдирд╛рд░ рдорд╛рд╡реЗрди рдХрд┐рдВрд╡рд╛ рдЧреНрд░реЗрдбрд▓рд╡рд░реАрд▓ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреГрддреАрджреНрд╡рд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рдЕрд░реНрдерд╛рдд, рд╣реЗ рдХрд╛рдЧрджрдкрддреНрд░рд╛рдд рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рд╡рд╛рдЪрддреЗ рдХреЛрдг ?!
рдХреГрддреАрджреНрд╡рд╛рд░реЗ рд╣реЗ рд╢рдХреНрдп рдирд╛рд╣реА, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рддреЗ 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 - рдпреЗрдереЗ рдорд┐рд│реВ рд╢рдХрддреЗ
Dsonar.projectKey - рд╕реЛрдирд╛рд░рдордзреАрд▓ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рдирд╛рд╡, рдЖрдкрдг рддреЗ рдкреНрд░рдХрд▓реНрдк рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛.
Dsonar.organization тАФ GitHub рд╡рд░реВрди рд╕рдВрд╕реНрдереЗрдЪреЗ рдирд╛рд╡.
рдЖрдореНрд╣реА рдПрдХ рдкреБрд▓ рд╡рд┐рдирдВрддреА рдХрд░рддреЛ рдЖрдгрд┐ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд╕реЛрдирд╛рд░рдХреНрд▓реЙрдб [рдмреЙрдЯ] рдпреЗрдгреНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЛ:
рдкреНрд░рдХрд╛рд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдЖрдореНрд╣реА рд░рд┐рд▓реАрдЭ рдХрд░реВ рд╢рдХрддреЛ. GitHub рдЕреЕрдХреНрд╢рдиреНрд╕ рд░рд┐рд▓реАрдЭ рдореЕрдиреЗрдЬрдореЗрдВрдЯ рдХрд┐рддреА рд╕реЛрдкреЗ рдХрд░реВ рд╢рдХрддрд╛рдд рддреЗ рдкрд╛рд╣реВ.
рдХрд╛рдорд╛рд╡рд░, рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдЕрд╕реЗ рдкреНрд░рдХрд▓реНрдк рдЖрд╣реЗрдд рдЬреНрдпрд╛рдВрдЪрд╛ рдХреЛрдб рдмреЗрд╕ рдмрд┐рдЯрдмрдХреЗрдЯрдордзреНрдпреЗ рдЖрд╣реЗ (рд╕рд░реНрд╡ рдХрд╛рд╣реА рддреНрдпрд╛ рдХрдереЗрдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ тАЬрдореА рджрд┐рд╡рд╕рд╛ рдмрд┐рдЯрдмрдХреЗрдЯрд▓рд╛ рд▓рд┐рд╣рд┐рддреЛ, рд░рд╛рддреНрд░реА рдЧрд┐рдЯрд╣рдмрд▓рд╛ рдХрдорд┐рдЯ рдХрд░рддреЛтАЭ). рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдмрд┐рдЯрдмрдХреЗрдЯрдордзреНрдпреЗ рдЕрдВрдЧрднреВрдд рдкреНрд░рдХрд╛рд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд╛рдзрдиреЗ рдирд╛рд╣реАрдд. рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ, рдХрд╛рд░рдг рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓реАрдЭрд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдореЕрдиреНрдпреБрдЕрд▓реА рдПрдХ рдкреГрд╖реНрда рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ рд░рд┐рд▓реАрдЭрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реА рд╕рд░реНрд╡ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рддреЗрдереЗ рдлреЗрдХреВрди рджреНрдпрд╛рд╡реА рд▓рд╛рдЧрддреАрд▓, рдордирд╛рдЪреНрдпрд╛ рд╡рд╛рдбреНрдпрд╛рдВрдордзреВрди рд╢реЛрдзрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓, рдЬрд┐рд░рд╛рдордзреАрд▓ рдХрд╛рд░реНрдпреЗ, рднрд╛рдВрдбрд╛рд░рд╛рдд рдХрдорд┐рдЯ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓. рдЪреВрдХ рд╣реЛрдгреНрдпрд╛рдЪреА рдЕрдиреЗрдХ рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗрдд, рддреБрдореНрд╣реА рдХрд╛рд╣реАрддрд░реА рд╡рд┐рд╕рд░реБ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рдорд╛рдЧрдЪреНрдпрд╛ рд╡реЗрд│реА рдЖрдзреАрдкрд╛рд╕реВрди рд░рд┐рд▓реАрдЭ рдХреЗрд▓реЗрд▓реЗ рдХрд╛рд╣реАрддрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛, рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдкреБрд▓ рд╡рд┐рдирдВрддреАрдЪреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рдп рдореНрд╣рдгреВрди рдХрд░рд╛рдпрдЪреЗ рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдирд╕рддреЗ - рд╣реЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЖрд╣реЗ рдХреА рджреЛрд╖ рдирд┐рд░рд╛рдХрд░рдг, рдХрд┐рдВрд╡рд╛ рд╕рдВрдкрд╛рджрди рдЪрд╛рдЪрдгреНрдпрд╛, рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрддрд░реА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛.
GitHub рдХреНрд░рд┐рдпрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд╢реА рдорджрдд рдХрд░реВ рд╢рдХрддрд╛рдд? рдПрдХ рдЙрддреНрддрдо рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗ - рд░рд┐рд▓реАрдЭ рдбреНрд░рд╛рдлреНрдЯрд░, рддреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╢реНрд░реЗрдгреА рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд░рд┐рд▓реАрдЭ рдиреЛрдЯреНрд╕ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдЧрдЯрдмрджреНрдз рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд░рд┐рд▓реАрдЭ рдиреЛрдЯреНрд╕ рдлрд╛рдЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ:
рдЕрд╣рд╡рд╛рд▓ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЙрджрд╛рд╣рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ (.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.
рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреЗ рд╕реНрд╡рдпрдВ-рднрд╛рд╖реНрдп
рдЖрдореНрд╣реА рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╕рд╣ рдкреНрд░рднрд╛рд╡реА рдХрд╛рд░реНрдп рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рд╕реНрдкрд░реНрд╢ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ, рд▓реЗрдмрд▓рд░рд╕рд╛рд░рдЦреНрдпрд╛ рдХреГрддреАрдмрджреНрджрд▓ рдмреЛрд▓рдгреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ, рддреЗ рдХреЛрдгрддреНрдпрд╛ рдлрд╛рдпрд▓реА рдмрджрд▓рд▓реНрдпрд╛ рдЖрд╣реЗрдд рдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд 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 рдХреНрд░рд┐рдпрд╛рдВрджреНрд╡рд╛рд░реЗ (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 рдордзреНрдпреЗ рдбреЗрдбрд▓реЙрдХрд┐рдВрдЧ рдХреНрд░рд┐рдпрд╛ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдГрдЪреЗ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЕрд╢ рдмрдирд╡рддреЗ.
рдЬрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЪрд╛рд▓рд▓реЗ рдЕрд╕реЗрд▓, рддрд░ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдкреЕрдХреЗрдЬреЗрд╕ рд╡рд┐рднрд╛рдЧ (https://github.com/antkorwin/github-actions/packages) рдЙрдШрдбрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдирд╡реАрди рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рджрд┐рд╕реЗрд▓:
рддреЗрдереЗ рдЖрдкрдг рдбреЙрдХрд░ рдкреНрд░рддрд┐рдореЗрдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдЪреА рд╕реВрдЪреА рджреЗрдЦреАрд▓ рдкрд╛рд╣реВ рд╢рдХрддрд╛.
рдпрд╛ рдиреЛрдВрджрдгреАрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрдгрд┐ рд╕реЗрд╡рд╛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреЗ рд╣реЗ рдмрд╛рдХреА рдЖрд╣реЗ. рдореА рдХрджрд╛рдЪрд┐рдд рджреБрд╕рд░реНтАНрдпрд╛ рд╡реЗрд│реА 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 * * * *'
рд╣реЗ рд╕реЛрдкреЗ рдЖрд╣реЗ, рдорд▓рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдмрд╕рдд рдирд╛рд╣реА рдХреА рдЧрд┐рдердмрдордзреНрдпреЗ рддреБрдореНрд╣реА рдЕрд╕реЗ рдЗрд╡реНрд╣реЗрдВрдЯ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ рдЬреЗ рд╡реЗрдмрд╣реВрдХрдордзреНрдпреЗ рдЕрдЬрд┐рдмрд╛рдд рдмрд╕рдд рдирд╛рд╣реАрдд. рддрдкрд╢реАрд▓ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдд рдЖрд╣реЗрдд:
рдХрд░реНрд▓рджреНрд╡рд╛рд░реЗ рд╕рд░реНрд╡реНрд╣рд░рдЪреА рд╕реНрдерд┐рддреА рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рддрдкрд╛рд╕реВрдпрд╛:
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 рд╡рд░ рд░рд╣рд╕реНрдпреЗ рд▓рд┐рд╣рд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░реВ рдирдХрд╛: рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА 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 рдордзреНрдпреЗ рдЯреЛрдХрди рдорд┐рд│рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рд╣реЗ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ рддреЗ рдпреЗрдереЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ:
рдЖрдореНрд╣реА рд╢рд╛рдЦреЗрдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░реВрди рдЯрд╛рд╕реНрдХ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рдХрд╛рдврддреЛ:
- 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 рд╡рд░реНрдХрдлреНрд▓реЛрдордзреАрд▓ рдЗрддрд░ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕ рдбреНрд░реЕрдЧ рдХрд░реВ рд╢рдХрддрд╛. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣реЗ рд╕рд░реНрд╡ рдЖрдкрд▓реНрдпрд╛ рдХрд▓реНрдкрдиреЗрд╡рд░ рдЖрдгрд┐ рдирд┐рдпрдорд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЗрдЪреНрдЫреЗрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ.
рдирд┐рд╖реНрдХрд░реНрд╖
рддреБрдореНрд╣реА рдХреНрд▓рд╛рд╕рд┐рдХ DEVOPS рдЖрдХреГрддреА рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдЯрдкреНрдкреЗ рдХрд╡реНрд╣рд░ рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рдХрджрд╛рдЪрд┐рдд рдСрдкрд░реЗрдЯ рдХрд░рдгреЗ рд╡рдЧрд│рддрд╛, рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рддреБрдореНрд╣реА рдкреНрд░рдпрддреНрди рдХреЗрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗрд▓реНрдк-рдбреЗрд╕реНрдХ рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рдПрдХрддреНрд░реАрдХрд░рдгрд╛рд╕рд╛рдареА рдмрд╛рдЬрд╛рд░рд╛рдд рдХрд╛рд╣реА рдХреГрддреА рд╕рд╛рдкрдбрддреАрд▓, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╡рд│рд▓реА рдЖрд╣реЗ. рд╕рдЦреЛрд▓ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдврд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.
рд╕рд╛рдзрдХ:
- рд╕рд░реНрд╡ рдкреНрд░рд╕рдВрдЧрд╛рдВрд╕рд╛рдареА рд░реЗрдбреАрдореЗрдб рдХреГрддреА рдЕрд╕рд▓реЗрд▓реЗ рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕, рд╣реЗ рдЦреВрдк рдЫрд╛рди рдЖрд╣реЗ. рддреНрдпрд╛рдкреИрдХреА рдмрд╣реБрддреЗрдХрд╛рдВрдордзреНрдпреЗ, рд╕рдорд╛рди рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд╕реЗ рдХрд░рд╛рд╡реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ GitHub рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдереЗрдЯ рд▓реЗрдЦрдХрд╛рд▓рд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд╡рд┐рдирдВрддреА рдкреЛрд╕реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕реНрддреНрд░реЛрдд рдХреЛрдб рджреЗрдЦреАрд▓ рдкрд╛рд╣реВ рд╢рдХрддрд╛.
- рдЕрд╕реЗрдВрдмреНрд▓реАрд╕рд╛рдареА рд▓рдХреНрд╖реНрдп рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдирд┐рд╡рдбрдгреЗ: рд▓рд┐рдирдХреНрд╕, рдореЕрдХ рдУрдПрд╕, рд╡рд┐рдВрдбреЛрдЬ рд╣реЗ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЖрд╣реЗ.
- рдЧрд┐рдердм рдкреЕрдХреЗрдЬреЗрд╕ рд╣реА рдПрдХ рдЙрддреНрддрдо рдЧреЛрд╖реНрдЯ рдЖрд╣реЗ, рд╕рдВрдкреВрд░реНрдг рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдПрдХрд╛рдЪ рдард┐рдХрд╛рдгреА рдареЗрд╡рдгреЗ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЦрд┐рдбрдХреНрдпрд╛рдВрдордзреВрди рд╕рд░реНрдл рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА, рд╕рд░реНрд╡ рдХрд╛рд╣реА рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рдорд╛рдКрд╕ рдХреНрд▓рд┐рдХрдЪреНрдпрд╛ рддреНрд░рд┐рдЬреНрдпреЗрдордзреНрдпреЗ рдЖрд╣реЗ рдЖрдгрд┐ GitHub рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдкреВрд░реНрдгрдкрдгреЗ рдПрдХрддреНрд░рд┐рдд рдЖрд╣реЗ. рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рдбреЙрдХрд░ рдиреЛрдВрджрдгреА рд╕рдорд░реНрдерди рджреЗрдЦреАрд▓ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рдлрд╛рдпрджрд╛ рдЖрд╣реЗ.
- GitHub рдмрд┐рд▓реНрдб рд▓реЙрдЧрдордзреНрдпреЗ рд░рд╣рд╕реНрдпреЗ рд▓рдкрд╡рддреЗ, рдореНрд╣рдгреВрди рдкрд╛рд╕рд╡рд░реНрдб рдЖрдгрд┐ рдЯреЛрдХрди рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреЗ рдЗрддрдХреЗ рднрдпрд╛рдирдХ рдирд╛рд╣реА. рдорд╛рдЭреНрдпрд╛ рд╕рд░реНрд╡ рдкреНрд░рдпреЛрдЧрд╛рдВрджрд░рдореНрдпрд╛рди, рдорд▓рд╛ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рд╢реБрджреНрдз рд╕реНрд╡рд░реВрдкрд╛рдд рд░рд╣рд╕реНрдп рдХрдзреАрд╣реА рдкрд╛рд╣рд╛рдпрд▓рд╛ рдорд┐рд│рд╛рд▓реЗ рдирд╛рд╣реА.
- рдореБрдХреНрдд рд╕реНрд░реЛрдд рдкреНрд░рдХрд▓реНрдкрд╛рдВрд╕рд╛рдареА рд╡рд┐рдирд╛рдореВрд▓реНрдп
рдмрд╛рдзрдХ
- YML, рдареАрдХ рдЖрд╣реЗ, рдорд▓рд╛ рддреЛ рдЖрд╡рдбрдд рдирд╛рд╣реА. рдЕрд╢рд╛ рдкреНрд░рд╡рд╛рд╣рд╛рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рддрд╛рдирд╛, рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдХрдорд┐рдЯ рдореЗрд╕реЗрдЬ рдЖрд╣реЗ тАЬрдлрд┐рдХреНрд╕ yml рдлреЙрд░рдореЕрдЯтАЭ, рдирдВрддрд░ рддреБрдореНрд╣реА рдХреБрдареЗрддрд░реА рдЯреЕрдм рдЯрд╛рдХрд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░рд▓рд╛рдд рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рдЪреБрдХреАрдЪреНрдпрд╛ рдУрд│реАрд╡рд░ рд▓рд┐рд╣рд┐рддрд╛. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдкреНрд░реЛрдЯреНрд░реЗрдХреНрдЯрд░ рдЖрдгрд┐ рд╢рд╛рд╕рдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реНрдХреНрд░реАрдирд╕рдореЛрд░ рдмрд╕рдгреЗ рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рдЖрдирдВрджрджрд╛рдпреА рдЕрдиреБрднрд╡ рдирд╛рд╣реА.
- рдбреАрдмрдЧ, рдХрдорд┐рдЯрд╕рд╣ рдкреНрд░рд╡рд╛рд╣ рдбреАрдмрдЧ рдХрд░рдгреЗ, рдкреБрдирд░реНрдмрд╛рдВрдзрдгреА рдЪрд╛рд▓рд╡рдгреЗ рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓рд╡рд░ рдЖрдКрдЯрдкреБрдЯ рдХрд░рдгреЗ рд╣реЗ рдиреЗрд╣рдореАрдЪ рд╕реЛрдпреАрдЪреЗ рдирд╕рддреЗ, рдкрд░рдВрддреБ рд╣реЗ "рддреБрдореНрд╣реА рдУрд╡реНрд╣рд░рдбрди рдХреЗрд▓реЗ" рд╢реНрд░реЗрдгреАрдЪреЗ рдЕрдзрд┐рдХ рдЖрд╣реЗ; рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реЛрдпреАрд╕реНрдХрд░ IDEA рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреА рд╕рд╡рдп рдЖрд╣реЗ, рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдХрд╛рд╣реАрд╣реА рдбреАрдмрдЧ рдХрд░реВ рд╢рдХрддрд╛. .
- рддреБрдореНрд╣реА рддреБрдордЪреА рдХреГрддреА рдбреЙрдХрд░рдордзреНрдпреЗ рдЧреБрдВрдбрд╛рд│рд▓реНрдпрд╛рд╕ рддреНрдпрд╛рд╡рд░ рд▓рд┐рд╣реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рдХреЗрд╡рд│ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓рд╛ рдореВрд│ рдЖрдзрд╛рд░ рдЖрд╣реЗ, рдЕрд░реНрдерд╛рдд рд╣реА рдЪрд╡реАрдЪреА рдмрд╛рдм рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореА js рдРрд╡рдЬреА рджреБрд╕рд░реЗ рдХрд╛рд╣реАрддрд░реА рдкрд╕рдВрдд рдХрд░реЗрди.
рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ рдХреА рд╕рд░реНрд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╕рд╣ рднрд╛рдВрдбрд╛рд░ рдпреЗрдереЗ рдЖрд╣реЗ:
рдкреБрдврдЪреНрдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдд рдореА рд╕реЛрдмрдд рдкрд░рдлреЙрд░реНрдо рдХрд░рдгрд╛рд░ рдЖрд╣реЗ
рдЕрд╣рд╡рд╛рд▓ Heisenbug 2020 Piter рдкрд░рд┐рд╖рджреЗрдд. рдЪрд╛рдЪрдгреА рдбреЗрдЯрд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдЪреБрдХрд╛ рдХрд╢рд╛ рдЯрд╛рд│рд╛рд╡реНрдпрд╛рдд рд╣реЗ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдВрдЧреЗрди, рддрд░ Java рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдбреЗрдЯрд╛ рд╕реЗрдЯрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреЗ рдорд╛рдЭреЗ рд░рд╣рд╕реНрдп рджреЗрдЦреАрд▓ рд╕рд╛рдВрдЧреЗрди!
рд╕реНрддреНрд░реЛрдд: www.habr.com