Compare commits

..

25 commits
v1.0.0 ... main

Author SHA1 Message Date
4efaa235c7
enable turbo caching on the linting 2025-10-27 12:47:28 +01:00
eee3e692e3
chore: update readme 2025-10-24 11:42:06 +02:00
3a578df79e
chore: update readme 2025-10-24 11:38:30 +02:00
0b09b4159c
feat: harden tag pattern matches on standalone versions 2025-10-24 11:35:13 +02:00
4c742dcf06
chore: upate latest tag policy on standalone build 2025-10-24 11:26:18 +02:00
0efcb3241a
update 2025-10-23 16:51:51 +02:00
2d0f5e8f27
refine tagging policies 2025-10-23 16:40:05 +02:00
cb2d8f8a3a
update 2025-10-23 16:28:47 +02:00
d948827a0e
feat: add dynamic registry optional 2025-10-23 11:16:19 +02:00
35e11b7a5c
update 2025-10-23 10:12:35 +02:00
3b25dc1c11
update 2025-10-23 10:08:46 +02:00
f4a5e749fa
update 2025-10-23 10:03:20 +02:00
94b3548ec8
upate 2025-10-23 10:00:06 +02:00
96cb5c8ca5
update 2025-10-23 09:51:45 +02:00
ce9e0ba4e8
Merge branch 'main' of https://git.kvant.cloud/phoenix-oss/frontend-commons 2025-10-23 09:07:08 +02:00
0501a2fd55
chore: update readme 2025-10-23 09:06:52 +02:00
92ee664d57 Merge pull request 'ci(github-action)!: Update https://github.com/SonarSource/sonarqube-scan-action action to v6 (renovate)' (#3) from renovate/https-github.com-sonarsource-sonarqube-scan-action-6.x into main
Reviewed-on: #3
2025-10-23 07:04:04 +00:00
541402138b Merge pull request 'ci(github-action)!: Update https://github.com/actions/github-script action to v8 (renovate)' (#4) from renovate/https-github.com-actions-github-script-8.x into main
Reviewed-on: #4
2025-10-23 07:03:51 +00:00
2cacfd09ae Merge pull request 'ci(github-action)!: Update actions/setup-node action to v6 (renovate)' (#2) from renovate/actions-setup-node-6.x into main
Reviewed-on: #2
2025-10-23 07:03:31 +00:00
e9ceac2b4b
extend functionality 2025-10-23 09:02:35 +02:00
7ee2574b75 ci(github-action)!: Update https://github.com/actions/github-script action to v8 (renovate) 2025-10-22 22:26:47 +00:00
8422c33013 ci(github-action)!: Update https://github.com/SonarSource/sonarqube-scan-action action to v6 (renovate) 2025-10-22 22:26:45 +00:00
d8523348ce ci(github-action)!: Update actions/setup-node action to v6 (renovate) 2025-10-22 22:26:43 +00:00
9239fe16e6
update 2025-10-22 23:03:21 +02:00
6759809040
chore: update readme 2025-10-22 22:53:03 +02:00
4 changed files with 100 additions and 35 deletions

View file

@ -8,6 +8,10 @@ on:
PROJECT_ID: PROJECT_ID:
required: true required: true
type: string type: string
DOCKER_REGISTRY:
required: false
type: string
default: git.kvant.cloud
jobs: jobs:
build_and_push: build_and_push:
@ -26,10 +30,12 @@ jobs:
tags: | tags: |
type=ref,event=branch,branch=dev,suffix=-{{sha}},optional=true type=ref,event=branch,branch=dev,suffix=-{{sha}},optional=true
type=ref,event=branch,branch=dev,value=dev,optional=true type=ref,event=branch,branch=dev,value=dev,optional=true
type=match,event=tag,pattern=v(.*),group=1,prefix=v,optional=true type=match,event=tag,pattern=.*_?(v\d+\.\d+\.\d+(?:-[\w\d.-]+)?),group=1,prefix=,optional=true
type=match,event=tag,pattern=.*_?(v\d+\.\d+\.\d+(?:-[\w\d.-]+)?),value=latest,optional=true
type=match,event=tag,pattern=.*v(\\d+\\.\\d+\\.\\d+).*,group=1,prefix=v,optional=true
- name: Print (debug) Docker meta JSON - name: Print (debug) Docker meta JSON
uses: https://github.com/actions/github-script@v7 uses: https://github.com/actions/github-script@v8
with: with:
script: | script: |
const json = JSON.parse(process.env.JSON_STRING); const json = JSON.parse(process.env.JSON_STRING);
@ -45,7 +51,7 @@ jobs:
- name: Login into gitea registry - name: Login into gitea registry
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: git.kvant.cloud registry: ${{ inputs.DOCKER_REGISTRY }}
username: ${{ inputs.PACKAGE_WRITER_USERNAME }} username: ${{ inputs.PACKAGE_WRITER_USERNAME }}
password: ${{ secrets.PACKAGE_WRITER_TOKEN }} password: ${{ secrets.PACKAGE_WRITER_TOKEN }}

View file

@ -5,6 +5,10 @@ on:
PACKAGE_WRITER_USERNAME: PACKAGE_WRITER_USERNAME:
required: true required: true
type: string type: string
DOCKER_REGISTRY:
required: false
type: string
default: git.kvant.cloud
jobs: jobs:
build_and_push: build_and_push:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -22,13 +26,11 @@ jobs:
tags: | tags: |
type=ref,event=branch,branch=dev,suffix=-{{sha}},optional=true type=ref,event=branch,branch=dev,suffix=-{{sha}},optional=true
type=ref,event=branch,branch=dev,value=dev,optional=true type=ref,event=branch,branch=dev,value=dev,optional=true
type=match,event=tag,pattern=v(.*),group=1,prefix=v,optional=true type=match,event=tag,pattern=v(\d+\.\d+\.\d+(?:-[\w\d.-]+)?),group=1,prefix=v,optional=true
type=match,event=tag,pattern=v(.*),value=latest,optional=true type=match,event=tag,pattern=v(\d+\.\d+\.\d+(?:-[\w\d.-]+)?),value=latest,optional=true
flavor: |
latest=false
- name: Print (debug) Docker meta JSON - name: Print (debug) Docker meta JSON
uses: https://github.com/actions/github-script@v7 uses: https://github.com/actions/github-script@v8
with: with:
script: | script: |
const json = JSON.parse(process.env.JSON_STRING); const json = JSON.parse(process.env.JSON_STRING);
@ -38,13 +40,18 @@ jobs:
console.log(JSON.stringify(json, null, 2)); console.log(JSON.stringify(json, null, 2));
console.log(""); console.log("");
console.log("------------------------------------------------------------"); console.log("------------------------------------------------------------");
console.log("Container meta runtime env:")
console.log("IMAGE_TAG: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}")
console.log("VCS_REF: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}")
console.log("BUILD_DATE: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}")
console.log("------------------------------------------------------------");
env: env:
JSON_STRING: ${{ steps.meta.outputs.json }} JSON_STRING: ${{ steps.meta.outputs.json }}
- name: Login into gitea registry - name: Login into gitea registry
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: git.kvant.cloud registry: ${{ inputs.DOCKER_REGISTRY }}
username: ${{ inputs.PACKAGE_WRITER_USERNAME }} username: ${{ inputs.PACKAGE_WRITER_USERNAME }}
password: ${{ secrets.PACKAGE_WRITER_TOKEN }} password: ${{ secrets.PACKAGE_WRITER_TOKEN }}

View file

@ -17,7 +17,23 @@ on:
TEST_SCRIPT: TEST_SCRIPT:
required: false required: false
type: string type: string
default: yarn run test --ci --passWithNoTests --coverage default: yarn run test
LINT_SCRIPT:
required: false
type: string
default: yarn run lint
CHECK_TYPES_SCRIPT:
required: false
type: string
default: yarn run check-types
INSTALL_SCRIPT:
required: false
type: string
default: yarn install --immutable --inline-builds
NODE_VERSION:
required: false
type: string
default: "24"
jobs: jobs:
linting_type_checking: linting_type_checking:
@ -25,14 +41,18 @@ jobs:
env: env:
NO_YARN_POSTINSTALL: 1 NO_YARN_POSTINSTALL: 1
FONTAWESOME_PACKAGE_TOKEN: ${{ secrets.FONTAWESOME_PACKAGE_TOKEN }} FONTAWESOME_PACKAGE_TOKEN: ${{ secrets.FONTAWESOME_PACKAGE_TOKEN }}
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_API: ${{ vars.TURBO_API }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
TURBO_URL: ${{ vars.TURBO_URL }}
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v5 uses: actions/checkout@v5
- name: Set up Node.js and Corepack - name: Set up Node.js and Corepack
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: "22" node-version: ${{ inputs.NODE_VERSION }}
- name: Enable Corepack - name: Enable Corepack
run: | run: |
@ -40,7 +60,7 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: | run: |
yarn install --immutable --inline-builds ${{ inputs.INSTALL_SCRIPT }}
- name: Setup repostitory - name: Setup repostitory
run: | run: |
@ -48,11 +68,11 @@ jobs:
- name: Lint source code (eslint) - name: Lint source code (eslint)
run: | run: |
yarn run lint --max-warnings=0 ${{ inputs.LINT_SCRIPT }}
- name: Static type checking (TypeScript) - name: Static type checking (TypeScript)
run: | run: |
yarn run check-types ${{ inputs.CHECK_TYPES_SCRIPT }}
- name: Run tests - name: Run tests
if: ${{ inputs.TESTS_ENABLED == true }} if: ${{ inputs.TESTS_ENABLED == true }}
@ -60,7 +80,7 @@ jobs:
${{ inputs.TEST_SCRIPT }} ${{ inputs.TEST_SCRIPT }}
- name: Static code analysis with SonarQube - name: Static code analysis with SonarQube
uses: https://github.com/SonarSource/sonarqube-scan-action@v5 uses: https://github.com/SonarSource/sonarqube-scan-action@v6
if: ${{ inputs.SONARQUBE_ENABLED == true }} if: ${{ inputs.SONARQUBE_ENABLED == true }}
env: env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

View file

@ -8,36 +8,60 @@ GitHub (forgejo) pipelines and other CI/CD utilities for the frontends Phoenix T
## .Github Workflows: Build and push containers ## .Github Workflows: Build and push containers
### Docker / Container build
Containers are built using dedicated `Dockerfile`s located in the `/docker` directory within each project repository. After the build, the images are pushed to the registry. Containers are built using dedicated `Dockerfile`s located in the `/docker` directory within each project repository. After the build, the images are pushed to the registry.
### `Build Standalone` ### Tagging
Only tags following the specified patterns will be considered within container tags. Any other patterns will be ignored, ensuring adherence to the established tagging policy.
#### Standalone
- v1.0.0
- v1.0.0-\<anything\>
#### Monorepo
- <project_id>\_v1.0.0
- <project_id>\_v1.0.0-\<anything\>
### Pipelines
#### `Build`
A standard single-repository project with a `package.json` file located at the root, managing dependencies for the entire project. A standard single-repository project with a `package.json` file located at the root, managing dependencies for the entire project.
##### Vars (inherited) ###### Vars (inherited)
Setuped on org or repo level.
| Key | Description | Required | | Key | Description | Required |
| ------------ | --------------- | -------- | | ------------ | --------------- | -------- |
| `IMAGE_PATH` | Image base path | ✓ | | `IMAGE_PATH` | Image base path | ✓ |
##### Inputs ###### Inputs
| Key | Description | Required | | Key | Description | Required |
| ------------------------- | ------------------------------- | -------- | | ------------------------- | ------------------------------- | -------- |
| `PACKAGE_WRITER_USERNAME` | User name of the package writer | ✓ | | `PACKAGE_WRITER_USERNAME` | User name of the package writer | ✓ |
##### Secrets ###### Secrets
Note: Secrets must be explicitly passed to workflows, even if they are defined at the repository or organization level. This is due to the way Forgejo handles secrets in workflows.
| Key | Description | Required | | Key | Description | Required |
| --------------------------- | --------------------------------------------------------- | -------- | | --------------------------- | --------------------------------------------------------- | -------- |
| `PACKAGE_WRITE_TOKEN` | Accesstoken of the package writer | ✓ | | `PACKAGE_WRITE_TOKEN` | Accesstoken of the package writer | ✓ |
| `FONTAWESOME_PACKAGE_TOKEN` | Fontawesome Pro library token (Only needed if FA in use ) | | | `FONTAWESOME_PACKAGE_TOKEN` | Fontawesome Pro library token (Only needed if FA in use ) | |
### `Build Monorepo` #### `Build-Monorepo`
A monorepo project based on Turborepo, with individual projects located under the `/apps/<PROJECT_ID>` directory. A monorepo project based on Turborepo, with individual projects located under the `/apps/<PROJECT_ID>` directory.
##### Vars (inherited) ###### Vars (inherited)
Setuped on org or repo level.
| Key | Description | Required | | Key | Description | Required |
| ----------------- | ------------------ | -------- | | ----------------- | ------------------ | -------- |
@ -45,14 +69,16 @@ A monorepo project based on Turborepo, with individual projects located under th
| `TURBO_TEAM` | Turbo repo team ID | | | `TURBO_TEAM` | Turbo repo team ID | |
| `TURBO_API` | Turbo repo api url | | | `TURBO_API` | Turbo repo api url | |
##### Inputs ###### Inputs
| Key | Description | Required | | Key | Description | Required |
| ------------------------- | ------------------------------- | -------- | | ------------------------- | ------------------------------- | -------- |
| `PACKAGE_WRITER_USERNAME` | User name of the package writer | ✓ | | `PACKAGE_WRITER_USERNAME` | User name of the package writer | ✓ |
| `PROJECT_ID` | ID of the projcet | ✓ | | `PROJECT_ID` | ID of the projcet | ✓ |
##### Secrets ###### Secrets
Note: Secrets must be explicitly passed to workflows, even if they are defined at the repository or organization level. This is due to the way Forgejo handles secrets in workflows.
| Key | Description | Required | | Key | Description | Required |
| --------------------------- | -------------------------------------------------- | -------- | | --------------------------- | -------------------------------------------------- | -------- |
@ -62,11 +88,15 @@ A monorepo project based on Turborepo, with individual projects located under th
## .Github Workflows: Linting, type checking, code analyzis, dependency tracking ## .Github Workflows: Linting, type checking, code analyzis, dependency tracking
### `Lint` ### Pipelines
#### `Lint`
Linting, type checking, sonarqube, dependency tracking, any testing Linting, type checking, sonarqube, dependency tracking, any testing
##### Vars (inherited) ###### Vars (inherited)
Setuped on org or repo level.
| Key | Description | Required | | Key | Description | Required |
| ---------------- | ------------------------------------------------- | -------- | | ---------------- | ------------------------------------------------- | -------- |
@ -74,18 +104,20 @@ Linting, type checking, sonarqube, dependency tracking, any testing
| `TURBO_API` | Turbo repo api url (only applicable on monorepos) | | | `TURBO_API` | Turbo repo api url (only applicable on monorepos) | |
| `SONAR_HOST_URL` | Sonarqube Host (required if sonarqube is enabled) | | | `SONAR_HOST_URL` | Sonarqube Host (required if sonarqube is enabled) | |
##### Inputs ###### Inputs
| Key | Description | Required | | Key | Description | Required |
| ------------------- | ---------------------------------------------------------------------------------- | -------- | | -------------------- | ---------------------------------------------------------------------------------- | -------- |
| `SONARQUBE_ENABLED` | Send source to sonarqube for code analysis; default: `false` | | | `SONARQUBE_ENABLED` | Send source to sonarqube for code analysis; default: `false` | |
| `TESTS_ENABLED` | Enable test suites; default: `false` | | | `TESTS_ENABLED` | Enable test suites; default: `false` | |
| `SETUP_REPO_SCRIPT` | Script which runs after install for setting up the repo; default: `yarn run setup` | | | `SETUP_REPO_SCRIPT` | Script which runs after install for setting up the repo; default: `yarn run setup` | |
| `TEST_SCRIPT` | Script which runs when tests are enabled; default: `yarn run test:coverage:lcov` | | | `TEST_SCRIPT` | Script which runs when tests are enabled; default: `yarn run test` | |
| `LINT_SCRIPT` | Script which runs eslint; default: `yarn run lint` | |
| `CHECK_TYPES_SCRIPT` | Script which runs tsc type checking: `yarn run check-types` | |
TEST_SCRIPT ###### Secrets
##### Secrets Note: Secrets must be explicitly passed to workflows, even if they are defined at the repository or organization level. This is due to the way Forgejo handles secrets in workflows.
| Key | Description | Required | | Key | Description | Required |
| --------------------------- | ----------------------------------------------------------- | -------- | | --------------------------- | ----------------------------------------------------------- | -------- |