Flujo de trabajo - The-Software-Design-Company/tsdc-vynils-app GitHub Wiki
Flujo de trabajo
Para el flujo de trabajo de desarrollo se utilizará gitflow orientado al uso de feature branches, el cual tiene las siguientes reglas implementadas en github actions
-
Las ramas principales son develop y master, master es la rama que será la que deberá tener los últimos cambios productivos
-
Todo nuevo feature debe partir de una rama feature/[Nombre de la rama] al hacer push se ejecutara un pipeline para evaluar y garantizar que los cambios no tengan errores
name: Android ci from a branch 📱🤖
on:
push:
branches: [master, develop, feature/*, bugfix/*, release/*, hotfix/*]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: fwilhe2/setup-kotlin@main
- uses: actions/setup-java@v3
with:
distribution: 'temurin' # See 'Supported distributions' for available options
java-version: '17'
- name: Generate build number
run: echo "The build number $GITHUB_RUN_NUMBER 🏗"
- name: Test 🧪
run: make test
- name: build ⚙️
run: make build
- Al culminar el feature se deberá enviar un PR a develop y este PR debe haber pasado el action "Android ci from a branch 📱🤖" y tener la aprobación del 50% luego de aprobado este deberá integrarse a la rama develop, este flujo deberá traerse los últimos cambios en develop y construir en base a lo integrado y ejecutar las pruebas
name: Merge to Develop
on:
pull_request:
types:
- edited
branches:
- 'bugfix/*'
- 'feature/*'
jobs:
merge-from-develop:
if: github.event.review.state == 'approved'
name: Merge from develop
runs-on: ubuntu-latest
steps:
- name: Mezcla ${{ github.ref }} -> develop
uses: tukasz/direct-merge-action@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
source-branch: develop
target-branch: ${{ github.ref }}
tests:
name: Tests
runs-on: ubuntu-latest
needs: merge-from-develop
steps:
- uses: actions/checkout@v2
- uses: fwilhe2/setup-kotlin@main
- uses: actions/setup-java@v3
with:
distribution: 'temurin' # See 'Supported distributions' for available options
java-version: '17'
- name: Test 🧪
run: make test
- name: Validate results with errors
if: ${{ failure() }}
env:
ERROR_MESSAGE: One or various test failed 🔴
run: echo "::set-output name=answer::${ERROR_MESSAGE}"
- name: Validate result without errors
if: ${{ success() }}
env:
MESSAGE_SUCCESS: All the tests were success
run: echo "::set-output name=answer::${MESSAGE_SUCCESS}"
build:
name: Build
runs-on: ubuntu-latest
needs: tests
steps:
- uses: actions/checkout@v2
- uses: fwilhe2/setup-kotlin@main
- uses: actions/setup-java@v3
with:
distribution: 'temurin' # See 'Supported distributions' for available options
java-version: '17'
- name: build ⚙️
run: make build
- name: Validate results with errors
if: ${{ failure() }}
env:
ERROR_MESSAGE: One or various test failed 🔴
run: echo "::set-output name=answer::${ERROR_MESSAGE}"
- name: Validate result without errors
if: ${{ success() }}
env:
MESSAGE_SUCCESS: All the tests were success
run: echo "::set-output name=answer::${MESSAGE_SUCCESS}"
merge:
name: Merge
runs-on: ubuntu-latest
needs: build
steps:
- name: Mezcla ${{ github.ref }} -> develop
if: ${{ github.event.review.state == 'approved' && success() }}
uses: tukasz/direct-merge-action@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
source-branch: ${{ github.ref }}
target-branch: develop
tag:
name: Create a tag
runs-on: ubuntu-latest
needs: merge
steps:
- name: create a tag for last develop commit
uses: actions/checkout@v2
with:
source-branch: develop
fetch-depth: 0
- name: Initialize git
run: git init
if: ${{ github.event.review.state == 'approved' && success() }}
- name: Initialize mandatory git config
run: |
git config user.name "GitHub Actions"
git config user.email [email protected]
- name: Create a Tag
run: |
git checkout develop
git tag merge-to-develop-$GITHUB_RUN_NUMBER
- name: Push tag
run: git push origin merge-to-develop-$GITHUB_RUN_NUMBER
Nota: es importante destacar que las ramas develop y master están bloqueadas la única forma de hacer integraciones es pasando por pull request
- Al tener el desarrollo integrado a develop y se esta seguro de pasar a producción se deberá integrar desde develop a master y este deberá partir de un pull request desde esta rama y ser aprobado de por lo menos un miembro del equipo así como deberá haber pasado de forma correcta el action "Android ci from a branch 📱🤖" el github action es el siguiente
name: Release
on:
pull_request:
types:
- edited
branches:
- 'develop'
jobs:
release:
if: github.event.review.state == 'approved'
name: Release branch
runs-on: ubuntu-latest
steps:
- name: Release
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Initialize git
run: git init
if: ${{ success() && github.head_ref == 'develop' }}
- name: Initialize mandatory git config
run: |
git config user.name "GitHub Actions"
git config user.email [email protected]
- name: Initialize mandatory git config
run: |
git pull
- name: Create release branch
run: |
git fetch --all
git pull
git checkout -b release/release-$GITHUB_RUN_NUMBER
git push --set-upstream origin release/release-$GITHUB_RUN_NUMBER
- name: Push new branch
run: git push --tags
merge:
name: Merge
runs-on: ubuntu-latest
needs: release
steps:
- name: Mezcla release/release-${{ github.run_number }} -> main
if: ${{ success() }}
uses: tukasz/direct-merge-action@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
target-branch: release/release-${{ github.run_number }}
source-branch: develop
tests:
name: Tests
runs-on: ubuntu-latest
needs: merge
steps:
- name: Checkout de repositorio
uses: actions/checkout@v2
- uses: fwilhe2/setup-kotlin@main
- uses: actions/setup-java@v3
with:
distribution: 'temurin' # See 'Supported distributions' for available options
java-version: '17'
- name: Test 🧪
run: make test
- name: Validate results with errors
if: ${{ failure() }}
env:
ERROR_MESSAGE: One or various test failed 🔴
run: echo "::set-output name=answer::${ERROR_MESSAGE}"
build:
name: Build
runs-on: ubuntu-latest
needs: tests
steps:
- name: Checkout de repositorio
uses: actions/checkout@v2
- uses: fwilhe2/setup-kotlin@main
- uses: actions/setup-java@v3
with:
distribution: 'temurin' # See 'Supported distributions' for available options
java-version: '17'
- name: build ⚙️
run: make build
- name: Validate results with errors
if: ${{ failure() }}
env:
ERROR_MESSAGE: One or various test failed 🔴
run: echo "::set-output name=answer::${ERROR_MESSAGE}"
merge-from-master:
name: Merge to master
runs-on: ubuntu-latest
needs: build
steps:
- name: Mezcla release/release-${{ github.run_number }} -> main
if: ${{ success() }}
uses: tukasz/direct-merge-action@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
target-branch: master
source-branch: release/release-${{ github.run_number }}