♻️(actions) create a reusable workflow to install front dependencies

In more than one workflow we need to install frontend dependencies and
this 3 workflows we are copy/pasting the same code. We want to refactor
this by creating a reusable workflow
https://docs.github.com/en/actions/sharing-automations/reusing-workflows
This commit is contained in:
Manuel Raynaud
2025-01-17 14:39:15 +01:00
parent e46ba4f506
commit 5be2bc7360
4 changed files with 69 additions and 66 deletions

View File

@@ -7,6 +7,11 @@ on:
- 'release/**' - 'release/**'
jobs: jobs:
install-front:
uses: ./.github/workflows/front-dependencies-installation.yml
with:
node_version: '20.x'
synchronize-with-crowdin: synchronize-with-crowdin:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
@@ -41,25 +46,12 @@ jobs:
CROWDIN_BASE_PATH: "../src/" CROWDIN_BASE_PATH: "../src/"
# frontend i18n # frontend i18n
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20.x"
- name: Restore the frontend cache - name: Restore the frontend cache
uses: actions/cache@v4
id: front-node_modules
with:
path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
- name: Install dependencies
if: steps.front-node_modules.outputs.cache-hit != 'true'
run: cd src/frontend/ && yarn install --frozen-lockfile
- name: Cache install frontend
if: steps.front-node_modules.outputs.cache-hit != 'true'
uses: actions/cache@v4 uses: actions/cache@v4
with: with:
path: "src/frontend/**/node_modules" path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
fail-on-cache-miss: true
- name: generate translations files - name: generate translations files
working-directory: src/frontend working-directory: src/frontend
run: yarn i18n:deploy run: yarn i18n:deploy

View File

@@ -7,7 +7,13 @@ on:
- main - main
jobs: jobs:
install-front:
uses: ./.github/workflows/front-dependencies-installation.yml
with:
node_version: '20.x'
synchronize-with-crowdin: synchronize-with-crowdin:
needs: install-front
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@@ -32,25 +38,12 @@ jobs:
run: | run: |
DJANGO_CONFIGURATION=Build python manage.py makemessages -a --keep-pot DJANGO_CONFIGURATION=Build python manage.py makemessages -a --keep-pot
# frontend i18n # frontend i18n
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20.x"
- name: Restore the frontend cache - name: Restore the frontend cache
uses: actions/cache@v4
id: front-node_modules
with:
path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
- name: Install dependencies
if: steps.front-node_modules.outputs.cache-hit != 'true'
run: cd src/frontend/ && yarn install --frozen-lockfile
- name: Cache install frontend
if: steps.front-node_modules.outputs.cache-hit != 'true'
uses: actions/cache@v4 uses: actions/cache@v4
with: with:
path: "src/frontend/**/node_modules" path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
fail-on-cache-miss: true
- name: generate source translation file - name: generate source translation file
working-directory: src/frontend working-directory: src/frontend
run: yarn i18n:extract run: yarn i18n:extract

View File

@@ -0,0 +1,36 @@
name: Install frontend installation reusable workflow
on:
workflow_call:
inputs:
node_version:
required: false
default: '20.x'
type: string
jobs:
front-dependencies-installation:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Restore the frontend cache
uses: actions/cache@v4
id: front-node_modules
with:
path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
- name: Setup Node.js
if: steps.front-node_modules.outputs.cache-hit != 'true'
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node_version }}
- name: Install dependencies
if: steps.front-node_modules.outputs.cache-hit != 'true'
run: cd src/frontend/ && yarn install --frozen-lockfile
- name: Cache install frontend
if: steps.front-node_modules.outputs.cache-hit != 'true'
uses: actions/cache@v4
with:
path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}

View File

@@ -9,39 +9,15 @@ on:
- "*" - "*"
jobs: jobs:
install-front: install-front:
runs-on: ubuntu-latest uses: ./.github/workflows/front-dependencies-installation.yml
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with: with:
node-version: "20.x" node_version: '20.x'
- name: Restore the frontend cache
uses: actions/cache@v4
id: front-node_modules
with:
path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
- name: Install dependencies
if: steps.front-node_modules.outputs.cache-hit != 'true'
run: cd src/frontend/ && yarn install --frozen-lockfile
- name: Cache install frontend
if: steps.front-node_modules.outputs.cache-hit != 'true'
uses: actions/cache@v4
with:
path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
test-front: test-front:
runs-on: ubuntu-latest
needs: install-front needs: install-front
runs-on: ubuntu-latest
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -53,10 +29,10 @@ jobs:
- name: Restore the frontend cache - name: Restore the frontend cache
uses: actions/cache@v4 uses: actions/cache@v4
id: front-node_modules
with: with:
path: "src/frontend/**/node_modules" path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
fail-on-cache-miss: true
- name: Test App - name: Test App
run: cd src/frontend/ && yarn test run: cd src/frontend/ && yarn test
@@ -68,29 +44,39 @@ jobs:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20.x"
- name: Restore the frontend cache - name: Restore the frontend cache
uses: actions/cache@v4 uses: actions/cache@v4
id: front-node_modules
with: with:
path: "src/frontend/**/node_modules" path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
fail-on-cache-miss: true
- name: Check linting - name: Check linting
run: cd src/frontend/ && yarn lint run: cd src/frontend/ && yarn lint
test-e2e-chromium: test-e2e-chromium:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: install-front
timeout-minutes: 20 timeout-minutes: 20
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20.x"
- name: Restore the frontend cache - name: Restore the frontend cache
uses: actions/cache@v4 uses: actions/cache@v4
id: front-node_modules
with: with:
path: "src/frontend/**/node_modules" path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
fail-on-cache-miss: true
- name: Set e2e env variables - name: Set e2e env variables
run: cat env.d/development/common.e2e.dist >> env.d/development/common.dist run: cat env.d/development/common.e2e.dist >> env.d/development/common.dist
@@ -141,12 +127,8 @@ jobs:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Restore the frontend cache - name: Install frontend dependencies
uses: actions/cache@v4 uses: ./.github/workflows/front-dependencies-installation.yml
id: front-node_modules
with:
path: "src/frontend/**/node_modules"
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
- name: Set e2e env variables - name: Set e2e env variables
run: cat env.d/development/common.e2e.dist >> env.d/development/common.dist run: cat env.d/development/common.e2e.dist >> env.d/development/common.dist