Π§Π΅ΡΡΠΎ ΠΌΠΈ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π² Java. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π½Π΅. ΠΠ°ΡΠΊΠΎΡΠΎ ΡΠ΅ΡΠΈΡ
Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌ Π΄Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΡ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΠΌΠΎΠΈΡΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΎΡ Travis-CI ΠΈ TeamCity ΠΊΡΠΌ GitHub Actions ΠΈ Π΅ΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ·Π»Π΅Π·Π΅ ΠΎΡ ΡΠΎΠ²Π°.
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅?
ΠΡΡΠ²ΠΎ, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅, Π½Π΅ΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Spring boot / Java 11 / Maven. ΠΠ° ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠΎ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ; ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° ΠΎΠΊΠΎΠ»ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ Π²Π°ΠΆΠ½Π° Π·Π° Π½Π°Ρ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΡ REST API ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ ΡΠ΅ Π½ΠΈ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ΅Π½.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ ΡΡΠΊ:
JIRA ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅
Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ JIRA ΠΊΠ°ΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΎΡΠ΄Π΅Π»Π½Π° Π΄ΡΡΠΊΠ° Π·Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΡΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ°ΠΌ:
ΠΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΡΠ΅ ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ Π½Π΅ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ°Ρ JIRA ΠΈ GitHub Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ.
ΠΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ°ΡΠΈΡΡ ΡΠ΅ΡΡΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ ΡΡΠ΅Π· maven, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΠΌΡ Π΅ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ, Π²ΡΠΈΡΠΊΠΎ, ΠΎΡ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ, Π΅ ΠΏΠ°ΠΊΠ΅ΡΡΡ mvn clean.
ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Github Actions, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ°ΠΉΠ» Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, ΠΎΠΏΠΈΡΠ²Π°Ρ Π½Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ, ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Ρ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ yml ΡΠ°ΠΉΠ», Π½Π΅ ΠΌΠΎΠ³Π° Π΄Π° ΠΊΠ°ΠΆΠ°, ΡΠ΅ Ρ Π°ΡΠ΅ΡΠ²Π°ΠΌ βyml ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅β, Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ - ΠΏΡΠ°Π²ΠΈΠΌ Π³ΠΎ Π² .github/ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ workflow/ ΡΠ°ΠΉΠ» build.yml, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³Π»Π°Π²Π½ΠΈΡ ΠΊΠ»ΠΎΠ½:
name: Build
on:
pull_request:
branches:
- '*'
push:
branches:
- 'master'
jobs:
build:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Maven Package
run: mvn -B clean package -DskipTests
on β ΡΠΎΠ²Π° Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ, Π½Π° ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½.
Π½Π°: pull_request/push β ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ ΠΊΡΠΌ Π³Π»Π°Π²Π½ΠΈΡ ΠΈ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π°Ρ Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
Π‘Π»Π΅Π΄Π²Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅ (ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ°) ΠΈ ΡΡΡΠΏΠΊΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ (ΡΡΡΠΏΠΊΠΈ) Π·Π° Π²ΡΡΠΊΠ° Π·Π°Π΄Π°ΡΠ°.
Π½Π°ΡΠΈΡΠ°Π½Π΅ - ΡΡΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΠΠ‘, ΠΈΠ·Π½Π΅Π½Π°Π΄Π²Π°ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π΄ΠΎΡΠΈ Mac OS, Π½ΠΎ Π² ΡΠ°ΡΡΠ½ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΡΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ° ΡΠΊΡΠΏΠΎ (Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Linux).
ΡΠΏΠΎΡΡΠ΅Π±ΠΈ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄ΡΡΠ³ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ actions/setup-java, Π½ΠΈΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° Java 11.
Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅, Ρ ΠΊΠΎΠΈΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ, ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ²Π° ΡΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ.
ΠΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΡΠ°Π²Π°, Π΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ Maven: run: mvn -B clean package
ΡΠ»Π°Π³ -B ΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ Π½Π΅ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ, ΡΠ°ΠΊΠ° ΡΠ΅ Maven ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ Π΄Π° Π½Π΅ ΠΈΡΠΊΠ° Π΄Π° Π½ΠΈ ΠΏΠΈΡΠ° Π½Π΅ΡΠΎ
Π‘ΡΡΠ°Ρ ΠΎΡΠ΅Π½! Π‘Π΅Π³Π°, Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π°Π½Π³Π°ΠΆΠΈΡΠ°ΡΠ΅ Ρ Π³Π»Π°Π²Π½ΠΈΡ, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π°ΠΏΠΎΡΠ²Π°.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡ
Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ΡΠΎ Π΅ Π΄ΠΎΠ±ΡΠΎ, Π½ΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ³Π»ΠΎΠ±Π΅Π½ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ° ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° Π³Π»Π΅Π΄Π°ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠ°Π²ΠΈΡΠ΅ PR ΠΏΡΠ΅Π³Π»Π΅Π΄ - Π·Π½Π°Π΅ΡΠ΅ ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΈ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΅ Π·Π°Π±ΡΠ°Π²ΠΈΠ» Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° ΡΠ²ΠΎΡ ΠΊΠ»ΠΎΠ½, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ»ΠΈΠ²Π°Π½Π΅.
Π©Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΏΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΡΠ΅ ΡΠ΅ ΡΠ»Π΅Π΅ΠΌ Π² Π³Π»Π°Π²Π½ΠΈΡ, ΠΊΠ°ΡΠΎ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΡΠ΅Ρ Π·Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°.
name: Build
on:
pull_request:
branches:
- '*'
push:
branches:
- 'master'
jobs:
build:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Maven Verify
run: mvn -B clean verify
- name: Test Coverage
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
ΠΠ° ΠΏΠΎΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ codecov Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΏΠ»ΡΠ³ΠΈΠ½Π° jacoco. codecov ΠΈΠΌΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π½ΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ ΡΠΎΠΊΠ΅Π½, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ Π½Π°ΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅:
${{ secrets.CODECOV_TOKEN }}
β ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π²Π΅Π΄Π½ΡΠΆ, secrets Π΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ½ΠΈ Π² GitHub, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ°ΠΌ ΠΏΠ°ΡΠΎΠ»ΠΈ/ΡΠΎΠΊΠ΅Π½ΠΈ/Ρ
ΠΎΡΡΠΎΠ²Π΅/url ΠΈ Π΄ΡΡΠ³ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π½Π° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΊΡΠΌ ΡΠ°ΠΉΠ½ΠΈ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° GitHub:
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΆΠ΅ΡΠΎΠ½ Π½Π°
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΏΠ»ΡΠ³ΠΈΠ½Π° jacoco ΠΊΡΠΌ POM ΡΠ°ΠΉΠ»Π°:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.4</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- attached to Maven test phase -->
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<reportFormat>plain</reportFormat>
<includes>
<include>**/*Test*.java</include>
<include>**/*IT*.java</include>
</includes>
</configuration>
</plugin>
Π‘Π΅Π³Π° Π±ΠΎΡΡΡ codecov ΡΠ΅ Π²ΡΠ²Π΅Π΄Π΅ Π²ΡΡΠΊΠ° ΠΎΡ Π½Π°ΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈ Π³ΡΠ°ΡΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ΡΠΎ:
ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ
Π ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ ΠΌΠΎΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΠΎΠ½Π°ΡΠ΅Π½ ΠΎΠ±Π»Π°ΠΊ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ ΠΊΠΎΠ΄, Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Ρ travis-ci. Π’Π°ΠΊΠ° ΡΠ΅ Π΅ Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΡΡΠΏΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΌΠΈΠ³ΡΠΈΡΠ°ΡΠ΅ ΠΊΡΠΌ GitHub Actions, Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΡΡΠΎΡΠΎ. ΠΠΊΡΡΠ½ ΠΏΠ°Π·Π°ΡΡΡ Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΎ Π½Π΅ΡΠΎ, Π½ΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΡ ΠΌΠ°Π»ΠΊΠΎ ΠΌΠ΅ ΡΠ°Π·ΠΎΡΠ°ΡΠΎΠ²Π°, Π·Π°ΡΠΎΡΠΎ ΠΏΠΎ Π½Π°Π²ΠΈΠΊ Π½Π°ΠΌΠ΅ΡΠΈΡ Π½ΡΠΆΠ½ΠΎΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈ Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΊΡΠΌ ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ. ΠΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ ΡΠΎΠ½Π°ΡΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ΅Π· Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° maven ΠΈΠ»ΠΈ gradle. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠΎΠ²Π° Π³ΠΎ ΠΏΠΈΡΠ΅ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°, Π½ΠΎ ΠΊΠΎΠΉ Π³ΠΎ ΡΠ΅ΡΠ΅?!
ΠΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ΅Π· Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠ΅Π· ΠΏΡΠΈΡΡΠ°Π²ΠΊΠ°ΡΠ° mvn:
name: SonarCloud
on:
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]
jobs:
sonarcloud:
runs-on: ubuntu-16.04
steps:
- uses: actions/checkout@v1
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Analyze with SonarCloud
# set environment variables:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# run sonar maven plugin:
run: mvn -B verify sonar:sonar -Dsonar.projectKey=antkorwin_github-actions -Dsonar.organization=antkorwin-github -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN -Dsonar.coverage.jacoco.xmlReportPaths=./target/site/jacoco/jacoco.xml
SONAR_TOKEN - ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ Π½Π°
Dsonar.projectKey β ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΡΠΎΠ½Π°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Dsonar.ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ β ΠΈΠΌΠ΅ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡΠ° ΠΎΡ GitHub.
ΠΡΠ°Π²ΠΈΠΌ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΡΠ°ΠΊΠ°ΠΌΠ΅ sonarcloud[bot] Π΄Π° Π²Π»Π΅Π·Π΅ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅:
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ΡΠΎ
ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π°, ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π²Π΅ΡΡΠΈΡ. ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ GitHub Actions ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ.
ΠΠ° ΡΠ°Π±ΠΎΡΠ° ΠΈΠΌΠ°ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΡΠΈΡΡΠΎ ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° Π΅ Π² bitbucket (Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΊΠ°ΡΠΎ Π² ΠΎΠ½Π°Π·ΠΈ ΠΈΡΡΠΎΡΠΈΡ βΠΠΈΡΠ° Π² bitbucket ΠΏΡΠ΅Π· Π΄Π΅Π½Ρ, Π°Π½Π³Π°ΠΆΠΈΡΠ°ΠΌ ΡΠ΅ Ρ GitHub ΠΏΡΠ΅Π· Π½ΠΎΡΡΠ°β). ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅ bitbucket Π½ΡΠΌΠ° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π·Π°ΡΠΎΡΠΎ Π·Π° Π²ΡΡΠΊΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠ±Π²Π° ΡΡΡΠ½ΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ° Π² ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈ Π΄Π° Ρ Π²ΡΡΠ»ΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ, Π΄Π° ΡΡΡΡΠΈΡΠ΅ Π² Π΄Π²ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠΌΠ°, Π·Π°Π΄Π°ΡΠΈ Π² jira, Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ. ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π½ΡΠΎΠ²Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π±ΡΠ°Π²ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΈΠ»ΠΈ Π΄Π° Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ Π΅ Π±ΠΈΠ»ΠΎ ΠΏΡΡΠ½Π°ΡΠΎ ΠΌΠΈΠ½Π°Π»ΠΈΡ ΠΏΡΡ, ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π΅ ΡΡΠ½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΊΠ»Π°ΡΠΈΡΠΈΡΠΈΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ - Π΄Π°Π»ΠΈ Π΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΡ Π½Π° Π³ΡΠ΅ΡΠΊΠ°, ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Π·Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅, ΠΈΠ»ΠΈ Π½Π΅ΡΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΎ.
ΠΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π° 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 }}
ΠΡΠΈΡΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΎΡΡΠ΅Π³Π° Π½Π°ΡΠ°ΡΡΠΊ ΡΠ΅ ΡΠ΅ ΡΡΠ±ΠΈΡΠ°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π² Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ - ΠΌΠ°Π³ΠΈΡ!
Π’ΡΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ Π²ΡΠΏΡΠΎΡΡΡ: ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π·Π°Π±ΡΠ°Π²ΡΡ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΡΡ ΡΠ°Π³ΠΎΠ²Π΅ Π² PR? Π’ΠΎΠ³Π°Π²Π° Π½Π΅ Π΅ ΡΡΠ½ΠΎ Π² ΠΊΠΎΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΡΡΠ΅ ΡΡΡΠ½ΠΎ, Ρ Π²ΡΠ΅ΠΊΠΈ PR ΠΏΠΎΠΎΡΠ΄Π΅Π»Π½ΠΎ. ΠΠ° Π΄Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΡΡΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ - label verifier - ΡΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΡΠ°Π³ΠΎΠ²Π΅ Π² Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅. ΠΠΊΠΎ Π½ΡΠΌΠ° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈ ΡΠ°Π³ΠΎΠ²Π΅, ΡΠΎΠ³Π°Π²Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π΅ΡΡΠΏΠ΅ΡΠ½Π° ΠΈ ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΠΎΠ²Π° Π² Π½Π°ΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
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.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π°Π½ΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π·Π°ΡΠ΅Π³Π½Π°Ρ
ΠΌΠ΅ ΡΠ°ΠΊΠ°Π²Π° ΡΠ΅ΠΌΠ° ΠΊΠ°ΡΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅, ΡΡΡΡΠ²Π° ΡΠΈ Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠ°ΠΊΠΎΠ²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠ°ΡΠΎ labeler, ΡΠΎΠΉ ΠΏΠΎΡΡΠ°Π²Ρ ΡΠ°Π³ΠΎΠ²Π΅ Π² 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/**"
ΠΠ΅ ΡΡΠΏΡΡ Π΄Π° ΡΠ΄Π²ΠΎΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Π² Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅, Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π΅ΡΠΈΠΊΠ΅ΡΠΈ; match-label Π½Π΅ ΠΈΡΠΊΠ° Π΄Π° Π²ΠΈΠΆΠ΄Π° Π΅ΡΠΈΠΊΠ΅ΡΠΈΡΠ΅, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΎΡ Π±ΠΎΡΠ°. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ΅ΡΠ°Π²Π° ΠΈ Π΄Π²Π°ΡΠ° Π΅ΡΠ°ΠΏΠ°. ΠΠΎ Π΄ΠΎΡΠΈ ΠΈ Π² ΡΠ°Π·ΠΈ ΡΠΎΡΠΌΠ° Π΅ Π΄ΠΎΡΡΠ° ΡΠ΄ΠΎΠ±Π½ΠΎ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅; ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π΅ΡΠΈΠΊΠ΅Ρ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.
ΠΡΠ΅ΠΌΠ΅ Π΅ Π·Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅
ΠΠΏΠΈΡΠ°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠΏΡΠΈΠΈ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΡΡΠ΅Π· GitHub Actions (ΡΡΠ΅Π· ssh, ΡΡΠ΅Π· scp ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° docker-hub) ΠΈ ΠΌΠΎΠ³Π° Π΄Π° ΠΊΠ°ΠΆΠ°, ΡΠ΅ Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΊΠ°ΡΠΈΡΠ΅ Π΄Π²ΠΎΠΈΡΠ½ΠΈΡ ΡΠ°ΠΉΠ» Π½Π° ΡΡΡΠ²ΡΡΠ°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΊΠΎΠ»ΠΊΠΎ ΠΊΡΠΈΠ² Π΅ Π²Π°ΡΠΈΡΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π΅.
Π₯Π°ΡΠ΅ΡΠ° ΠΌΠΈ ΠΎΠΏΡΠΈΡΡΠ° Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠ»Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π½Π° Π΅Π΄Π½ΠΎ ΠΌΡΡΡΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² GitHub (ΡΠΎΠ²Π° Π΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π° Π΄Π²ΠΎΠΈΡΠ½ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅, npm, jar, docker).
Π‘ΠΊΡΠΈΠΏΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ Π² GitHub ΠΏΠ°ΠΊΠ΅ΡΠΈ:
name: Deploy docker image
on:
push:
branches:
- 'master'
jobs:
build_docker_image:
runs-on: ubuntu-18.04
steps:
# Build JAR:
- uses: actions/checkout@v1
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Maven Package
run: mvn -B clean compile package -DskipTests
# Set global environment variables:
- name: set global env
id: global_env
run: |
echo "::set-output name=IMAGE_NAME::${GITHUB_REPOSITORY#*/}"
echo "::set-output name=DOCKERHUB_IMAGE_NAME::docker.pkg.github.com/${GITHUB_REPOSITORY}/${GITHUB_REPOSITORY#*/}"
# Build Docker image:
- name: Build and tag image
run: |
docker build -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:latest" -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:${GITHUB_SHA::8}" .
- name: Docker login
run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}
# Publish image to github package repository:
- name: Publish image
env:
IMAGE_NAME: $GITHUB_REPOSITORY
run: docker push "docker.pkg.github.com/$GITHUB_REPOSITORY/${{ steps.global_env.outputs.IMAGE_NAME }}"
ΠΡΡΠ²ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ JAR ΡΠ°ΠΉΠ»Π° Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ ΠΏΡΡΡ Π΄ΠΎ Π΄ΠΎΠΊΠ΅ΡΡΠΊΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° GitHub ΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. Π’ΡΠΊ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΈΠΊΠ°, Π½Π° ΠΊΠΎΠΈΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠΌΠ΅ ΡΠ΅ Π½Π°ΡΡΠΊΠ½Π°Π»ΠΈ:
- ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΊΠ°ΡΠΎ: echo β::set-output name=NAME::VALUEβ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π² ΡΠ΅ΠΊΡΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΎΡΠ΅ΡΠ΅Π½Π° Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ ΡΡΡΠΏΠΊΠΈ.
- ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°, Π·Π°Π΄Π°Π΄Π΅Π½Π° Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΡΡΠΏΠΊΠ° ΡΡΠ΅Π· ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΡΡΠΏΠΊΠ°: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
- Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° GITHUB_REPOSITORY ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊ (βowner/repo-nameβ). ΠΠ° Π΄Π° ΠΈΠ·ΡΠ΅ΠΆΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΎ ΠΎΡ ΡΠΎΠ·ΠΈ ΡΠ΅Π΄ Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ bash ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ: ${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 Packages Repository:
docker push "docker.pkg.github.com/antkorwin/github-actions/github-actions"
ΠΠ° Π΄Π° ΠΏΠΎΡΠΎΡΠΈΠΌ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΠΈΡΡΠΈ ΠΎΡ SHA Ρ Π΅ΡΠ° Π½Π° ΠΊΠΎΠΌΠΈΡΠ° - GITHUB_SHA ΡΡΠΊ ΡΡΡΠΎ ΠΈΠΌΠ° Π½ΡΠ°Π½ΡΠΈ, Π°ΠΊΠΎ ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ°ΠΊΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΡΠ»ΠΈΠ²Π°Π½Π΅ Π² master, Π½ΠΎ ΠΈ ΡΠΏΠΎΡΠ΅Π΄ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΡΡΠ±ΠΈΡΠΈΠ΅, ΡΠΎΠ³Π°Π²Π° SHA ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° Ρ Π΅ΡΠ°, ΠΊΠΎΠΉΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² Ρ ΡΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° git, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ action/checkout ΠΏΡΠ°Π²ΠΈ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ Ρ Π΅Ρ, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² PR.
ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π²ΡΡΠ²ΠΈ Π΄ΠΎΠ±ΡΠ΅, ΠΎΡΠ²Π°ΡΡΠΉΠΊΠΈ ΡΠ΅ΠΊΡΠΈΡΡΠ° Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ (https://github.com/antkorwin/github-actions/packages) Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ:
Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΏΠΈΡΡΠΊ Ρ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΡΡΠ°Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡ ΡΡΡΠ²ΡΡ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΠΎΠ·ΠΈ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΈ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ°. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΡΠΎΠ²Π° ΡΡΠ΅Π· systemd Π΄ΡΡΠ³ ΠΏΡΡ.
ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Π΄Π½Π° ΠΏΡΠΎΡΡΠ° ΠΎΠΏΡΠΈΡ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° GitHub Actions. ΠΠ°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ ΠΈΠΌΠ° Π·Π°Π΄Π²ΠΈΠΆΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄ΠΎΡΠΈ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ API, Π·Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ ΠΌΡ; Π²Π΅ΡΠ΅ ΡΠΌΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π²ΡΠΈΡΠΊΠΎ Π·Π° ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΈΡΠ΅. ΠΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π΄ΡΡΠΏΠ°ΡΠ΅ Ρ
ΠΎΡΡΠ°: SERVER-URL:PORT/actuator/health
$ curl -v 127.0.0.1:8080/actuator/health
> GET /actuator/health HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.61.1
> Accept: */*
< HTTP/1.1 200
< Content-Type: application/vnd.spring-boot.actuator.v3+json
< Transfer-Encoding: chunked
< Date: Thu, 04 Jun 2020 12:33:37 GMT
{"status":"UP"}
ΠΡΠΈΡΠΊΠΎ, ΠΎΡ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ, Π΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΠ° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° cron ΠΈ Π°ΠΊΠΎ ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ Π½Π΅ Π½ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠΈΠΌ ΠΈΠ·Π²Π΅ΡΡΠΈΠ΅ ΡΡΠ΅Π· ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌΠ°.
ΠΡΡΠ²ΠΎ, Π½Π΅ΠΊΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Π½Π° cron:
on:
schedule:
- cron: '*/5 * * * *'
ΠΡΠΎΡΡΠΎ Π΅, Π΄ΠΎΡΠΈ Π½Π΅ ΠΌΠΎΠ³Π° Π΄Π° ΠΏΠΎΠ²ΡΡΠ²Π°ΠΌ, ΡΠ΅ Π² Github ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΡΡΠ±ΠΈΡΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠΎ Π½Π΅ ΡΠ΅ Π²ΠΏΠΈΡΠ²Π°Ρ Π² webhooks. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅ ΡΠ° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°:
ΠΠ΅ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΡΠ²ΡΡΠ° ΡΡΡΠ½ΠΎ ΡΡΠ΅Π· curl:
jobs:
ping:
runs-on: ubuntu-18.04
steps:
- name: curl actuator
id: ping
run: |
echo "::set-output name=status::$(curl ${{secrets.SERVER_HOST}}/api/actuator/health)"
- name: health check
run: |
if [[ ${{ steps.ping.outputs.status }} != *"UP"* ]]; then
echo "health check is failed"
exit 1
fi
echo "It's OK"
ΠΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ²ΡΡΡΡ Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΠ» Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π΅ UP ΠΈ Π°ΠΊΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ°ΠΊΠ°, ΠΈΠ·Π»ΠΈΠ·Π°ΠΌΠ΅ Ρ Π³ΡΠ΅ΡΠΊΠ°. ΠΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° βΠ·Π°ΡΡΡΠΏΠ°ΡΠ΅β Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΡΡΡΠ΅ΡΠ΅ ΡΠΈ, ΡΠΎΠ³Π°Π²Π° ΠΈΠ·Ρ ΠΎΠ΄ 1 - ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅.
- name: send alert in telegram
if: ${{ failure() }}
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: |
Health check of the:
${{secrets.SERVER_HOST}}/api/actuator/health
failed with the result:
${{ steps.ping.outputs.status }}
ΠΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π΄ΠΎ telegram ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π΅ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΡΡΠΏΠΊΠ°. ΠΠ° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΠΌ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ appleboy/telegram-action; ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½ Π·Π° Π±ΠΎΡ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π° ΡΠ°Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°:
ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π² ΡΠ°ΠΉΠ½ΠΈΡΠ΅ Π½Π° Github: URL Π·Π° ΡΡΡΠ²ΡΡΠ° ΠΈ ΡΠΎΠΊΠ΅Π½ΠΈ Π·Π° Π±ΠΎΡΠ° Π·Π° ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌΠ°.
ΠΠΎΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π½ - JIRA Π·Π° ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΈΡΠ΅
ΠΠ±Π΅ΡΠ°Ρ , ΡΠ΅ ΡΠ΅ ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ Π² JIRA ΠΈ ΡΠ΅ Π²ΡΡΠ½Π°Ρ ΠΌΠ΅. Π‘ΡΠΎΡΠΈΡΠΈ ΠΏΡΡΠΈ ΡΡΠΌ Π½Π°Π±Π»ΡΠ΄Π°Π²Π°Π» ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ°Π²ΡΠ½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ»ΡΠ»ΠΈ ΡΠ° ΠΊΠ»ΠΎΠ½, Π½ΠΎ ΡΠ° Π·Π°Π±ΡΠ°Π²ΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² JIRA. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π°ΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ Π½Π° Π΅Π΄Π½ΠΎ ΠΌΡΡΡΠΎ, Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ, Π½ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π½ΠΈΠ΅ ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄ Π² IDE, ΡΠ»ΠΈΠ²Π°ΠΌΠ΅ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π² bitbucket ΠΈΠ»ΠΈ GitHub ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠ»ΡΠ·Π³Π°ΠΌΠ΅ Π·Π°Π΄Π°ΡΠΈΡΠ΅ Π² Jira, Π·Π° ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΠΌ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ , ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π²Π»ΠΈΠ·Π°ΠΉΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΈ Ρ.Π½. ΠΠΎΠ³Π°ΡΠΎ ΡΠΈ ΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΏΠ΅ΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π°, ΡΠΎΠ³Π°Π²Π° Π½ΡΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΠΎΡΠ²Π°ΡΡΡΠ΅ Π΄ΡΡΠΊΠ°ΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π½Π° ΡΡΡΡΠΈΠ½ΡΠ° ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ°Π²ΡΠ½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠ΄Π΅Π»ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΎΡΠΎ ΡΡΡ Π·Π°Π΄Π°ΡΠΈ.
GitHub ΡΡΡΠΎ ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π² ΡΠ°Π·ΠΈ ΡΡΡΠΈΠ½Π½Π° Π·Π°Π΄Π°ΡΠ°; ΠΊΠ°ΡΠΎ Π·Π° Π½Π°ΡΠ°Π»ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠ»ΡΠ·Π³Π°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π² ΠΊΠΎΠ»ΠΎΠ½Π°ΡΠ° code_review, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΠ΄Π°Π΄Π΅ΠΌ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅. ΠΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, Π΅ Π΄Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ΅ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡΡΠ° Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅:
[ΠΈΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°]-[Π½ΠΎΠΌΠ΅Ρ ΡΠ°ΡΠΊΠ°]-Π½Π°Π·Π²Π°Π½ΠΈΠ΅
Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΊΠ»ΡΡΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° βGitHub Actionsβ Π΅ GA, ΡΠΎΠ³Π°Π²Π° GA-8-jira-bot
ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠ»ΠΎΠ½ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° GA-8.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡΠ° Ρ JIRA ΡΠ°Π±ΠΎΡΠΈ ΡΡΠ΅Π· Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΡ Atlassian, ΡΠ΅ Π½Π΅ ΡΠ° ΠΏΠ΅ΡΡΠ΅ΠΊΡΠ½ΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΊΠ°ΠΆΠ°, ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΡΡ Π·Π° ΠΌΠ΅Π½. ΠΠΎ Π½ΠΈΠ΅ ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΠ°ΠΌΠΎ ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠ°Π±ΠΎΡΡΡ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ.
ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π²Π»Π΅Π·Π΅ΡΠ΅ Π² JIRA, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ: atlassian/gajira-login
jobs:
build:
runs-on: ubuntu-latest
name: Jira Workflow
steps:
- name: Login
uses: atlassian/gajira-login@master
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½ Π² JIRA, ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π° Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΡΡΠΊ:
ΠΠ·Π²Π»ΠΈΡΠ°ΠΌΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΠΎΠ½Π°:
- name: Find Issue
id: find_issue
shell: bash
run: |
echo "::set-output name=ISSUE_ID::$(echo ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}')"
echo brach name: $GITHUB_HEAD_REF
echo extracted issue: ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}'
- name: Check Issue
shell: bash
run: |
if [[ "${{steps.find_issue.outputs.ISSUE_ID}}" == "" ]]; then
echo "Please name your branch according to the JIRA issue: [project_key]-[task_number]-branch_name"
exit 1
fi
echo succcessfully found JIRA issue: ${{steps.find_issue.outputs.ISSUE_ID}}
ΠΠΊΠΎ ΡΡΡΡΠΈΡΠ΅ Π² ΠΏΠ°Π·Π°ΡΠ° Π½Π° GitHub, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π·Π° ΡΠ°Π·ΠΈ Π·Π°Π΄Π°ΡΠ°, Π½ΠΎ Π°Π· ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ° ΡΡΡΠΎΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ grep, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΠΎΠ½Π°, Π·Π°ΡΠΎΡΠΎ ΡΠΎΠ²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΡ Atlassian Π½Π΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΠΌΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎ Π½ΠΈΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ , Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄ ΡΠ°ΠΌ - ΠΏΠΎ-Π΄ΡΠ»Π³ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΡΡΠΎΡΠΎ Π½Π΅ΡΠΎ Ρ ΡΡΡΠ΅ΡΠ΅ ΡΠΈ.
ΠΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΡΠ°Π²Π°, Π΅ Π΄Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π² ΠΊΠΎΠ»ΠΎΠ½Π°ΡΠ° βΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°β, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅:
- name: Transition issue
if: ${{ success() }}
uses: atlassian/gajira-transition@master
with:
issue: ${{ steps.find_issue.outputs.ISSUE_ID }}
transition: "Code review"
ΠΠΌΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π·Π° ΡΠΎΠ²Π° Π² GitHub, Π²ΡΠΈΡΠΊΠΎ, ΠΎΡ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅, Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΡΡΠΏΠΊΠ°, ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π² JIRA, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅.
ΠΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠ»ΡΠ·Π³Π°ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΈ ΡΠ»ΠΈΠ²Π°Π½Π΅ Π² Π³Π»Π°Π²Π½ΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΠ±ΠΈΡΠΈΡ ΠΎΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° GitHub. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ Π²ΡΠΈΡΠΊΠΎ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ Π²Π°ΡΠ΅ΡΠΎ Π²ΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΠΈΠ½Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ.
ΠΠ°Π½Π½ΠΈ
ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΊΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠ°ΡΠ° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ° Π½Π° DEVOPS, Π½ΠΈΠ΅ ΡΠΌΠ΅ ΠΏΠΎΠΊΡΠΈΠ»ΠΈ Π²ΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ°, ΠΌΠΈΡΠ»Ρ, ΡΠ΅ Π°ΠΊΠΎ ΠΎΠΏΠΈΡΠ°ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½ΡΠΊΠ°ΠΊΠ²ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΠΏΠ°Π·Π°ΡΠ° Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΠΎΠΌΠΎΡ, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ, ΡΠ΅ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΡΡ ΡΠ΅ ΠΎΠ±ΡΡΠ½Π° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π·Π°Π΄ΡΠ»Π±ΠΎΡΠ΅Π½ ΠΈ Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° ΠΌΡ.
ΠΏΠ»ΡΡΠΎΠ²Π΅:
- ΠΠ°Π·Π°Ρ Ρ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΡΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡΠΈΠ½ΠΎ. Π ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ ΡΡΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎ Π°Π²ΡΠΎΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° GitHub.
- ΠΠ·Π±ΠΎΡΡΡ Π½Π° ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅: Linux, mac os, windows Π΅ Π΄ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ.
- Github Packages Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΎ Π½Π΅ΡΠΎ, ΡΠ΄ΠΎΠ±Π½ΠΎ Π΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ ΡΡΠ»Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π½Π° Π΅Π΄Π½ΠΎ ΠΌΡΡΡΠΎ, Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΡΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠ΅Π· ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ, Π²ΡΠΈΡΠΊΠΎ Π΅ Π² ΡΠ°Π΄ΠΈΡΡ ΠΎΡ Π΅Π΄Π½ΠΎ ΠΈΠ»ΠΈ Π΄Π²Π΅ ΠΊΠ»ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΠΌΠΈΡΠΊΠ°ΡΠ° ΠΈ Π΅ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ΠΎ Ρ GitHub Actions. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° Docker Π² Π±Π΅Π·ΠΏΠ»Π°ΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΡΡΠΎ Π΅ Π΄ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ.
- GitHub ΠΊΡΠΈΠ΅ ΡΠ°ΠΉΠ½ΠΈ Π² ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ Π·Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΈ ΡΠΎΠΊΠ΅Π½ΠΈ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΡΡΡΠ°ΡΠ½ΠΎ. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΡΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΡΠΏΡΡ Π΄Π° Π²ΠΈΠ΄Ρ ΡΠ°ΠΉΠ½Π°ΡΠ° Π² ΡΠΈΡΡΠ°ΡΠ° ΠΉ ΡΠΎΡΠΌΠ° Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°.
- ΠΠ΅Π·ΠΏΠ»Π°ΡΠ½ΠΎ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄
ΠΏΡΠΎΡΠΈΠ²:
- YML, Π΄ΠΎΠ±ΡΠ΅, Π½Π΅ Π³ΠΎ Ρ Π°ΡΠ΅ΡΠ²Π°ΠΌ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΊΡΠ² ΠΏΠΎΡΠΎΠΊ, Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½ΠΎΡΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠΌΠ°ΠΌ, Π΅ βΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ Π½Π° yml ΡΠΎΡΠΌΠ°Ρβ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π·Π°Π±ΡΠ°Π²ΡΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ°Π·Π΄Π΅Π» Π½ΡΠΊΡΠ΄Π΅ ΠΈΠ»ΠΈ Π³ΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° Π³ΡΠ΅ΡΠ΅Π½ ΡΠ΅Π΄. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ ΡΠ΅Π΄Π΅Π½Π΅ΡΠΎ ΠΏΡΠ΅Π΄ Π΅ΠΊΡΠ°Π½ Ρ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠΈΡ ΠΈ Π»ΠΈΠ½ΠΈΠΉΠΊΠ° Π½Π΅ Π΅ Π½Π°ΠΉ-ΠΏΡΠΈΡΡΠ½ΠΎΡΠΎ ΠΈΠ·ΠΆΠΈΠ²ΡΠ²Π°Π½Π΅.
- DEBUG, ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΠΎΡΠΎΠΊΠ° Ρ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ, ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ ΠΊΡΠΌ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Π΅ ΠΏΠΎ-ΡΠΊΠΎΡΠΎ ΠΎΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° βΠΏΡΠ΅ΠΊΠ°Π»ΡΠ²Π°ΡΠ΅β; ΡΠ²ΠΈΠΊΠ½Π°Π»ΠΈ ΡΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ ΡΠ΄ΠΎΠ±Π½Π° IDEA, ΠΊΠΎΠ³Π°ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄Π΅Π±ΡΠ³Π²Π°ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ .
- ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ ΡΠΈ Π²ΡΡΡ Ρ Π²ΡΠΈΡΠΊΠΎ, Π°ΠΊΠΎ Π³ΠΎ ΠΎΠ±Π²ΠΈΠ΅ΡΠ΅ Π² Docker, Π½ΠΎ ΡΠ°ΠΌΠΎ javascript ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠΎΠ²Π° Π΅ Π²ΡΠΏΡΠΎΡ Π½Π° Π²ΠΊΡΡ, Π½ΠΎ Π±ΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π» Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ Π²ΠΌΠ΅ΡΡΠΎ js.
ΠΠ΅ΠΊΠ° Π²ΠΈ Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΡΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π΅ ΡΡΠΊ:
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΠ΅Π΄ΠΌΠΈΡΠ° ΡΠ΅ ΡΡΠ°ΡΡΠ²Π°ΠΌ Ρ
Π΄ΠΎΠΊΠ»Π°Π΄ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° Heisenbug 2020 Piter. Π©Π΅ Π²ΠΈ ΠΊΠ°ΠΆΠ° Π½Π΅ ΡΠ°ΠΌΠΎ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ° Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΈ ΡΠ΅ ΡΠΏΠΎΠ΄Π΅Π»Ρ ΠΌΠΎΠΈΡΠ΅ ΡΠ°ΠΉΠ½ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ Π² Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ!
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com