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

  1. Las ramas principales son develop y master, master es la rama que será la que deberá tener los últimos cambios productivos

  2. 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
  1. 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

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