diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml
index 35dfc74..acc6150 100644
--- a/.github/workflows/sonar.yml
+++ b/.github/workflows/sonar.yml
@@ -97,9 +97,61 @@ on:
required: false
jobs:
+ build-package:
+ if: inputs.build_package == true
+ runs-on: ubuntu-latest
+ steps:
+ - name: Актуализация
+ uses: actions/checkout@v6.0.2
+
+ - name: Установка .NET
+ if: inputs.dotnet_version != ''
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ inputs.dotnet_version }}
+
+ - name: Вычисление версии OneScript
+ shell: bash
+ id: extract_oscript_version
+ run: |
+ set -ex
+ if [ "${{ inputs.oscript_version }}" = "default" ]
+ then
+ extracted_version=$(cat packagedef | grep ".ВерсияСреды(" | sed 's|[^"]*"||' | sed -r 's/".+//' || true)
+ version="${extracted_version:-stable}"
+ else
+ version="${{ inputs.oscript_version }}"
+ fi
+ echo "version=$version" >> $GITHUB_OUTPUT
+
+ - name: Установка OneScript
+ uses: otymko/setup-onescript@v1.5.1
+ with:
+ version: ${{ steps.extract_oscript_version.outputs.version }}
+
+ - name: Установка зависимостей
+ shell: bash
+ run: |
+ if [ -n "${{ inputs.opm_version }}" ]; then
+ opm install opm@${{ inputs.opm_version }}
+ else
+ opm install opm
+ fi
+ opm install -l
+
+ - name: Сборка пакета
+ run: opm build .
+
+ - name: Заливка артефакта пакета
+ uses: actions/upload-artifact@v6
+ with:
+ name: package
+ path: ./*.ospx
test:
runs-on: ${{ inputs.os_version }}
+ needs: build-package
+ if: ${{ !cancelled() && (needs.build-package.result == 'success' || needs.build-package.result == 'skipped') }}
env:
LANG: ${{ inputs.locale }}.UTF-8
LC_ALL: ${{ inputs.locale }}.UTF-8
@@ -178,9 +230,12 @@ jobs:
if: inputs.additional_oscript_packages != ''
run: opm install -l ${{ inputs.additional_oscript_packages }}
- - name: Сборка пакета
+ - name: Скачивание собранного пакета
if: inputs.build_package == true
- run: opm build .
+ uses: actions/download-artifact@v7
+ with:
+ name: package
+ path: .
- name: Запуск тестов
if: inputs.test_engine == '1testrunner'
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 1926d4e..c76bafe 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -79,8 +79,67 @@ on:
default: "tree"
jobs:
- build:
+ build-package:
+ if: inputs.build_package == true
+ runs-on: ubuntu-latest
+ steps:
+ - name: Актуализация
+ uses: actions/checkout@v6.0.2
+
+ - name: Установка свойств git
+ shell: bash
+ run: |
+ git config --global user.name "GitHub Actions"
+ git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+ - name: Установка .NET
+ if: inputs.dotnet_version != ''
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ inputs.dotnet_version }}
+
+ - name: Вычисление версии OneScript
+ shell: bash
+ id: extract_oscript_version
+ run: |
+ set -ex
+ if [ "${{ inputs.oscript_version }}" = "default" ]
+ then
+ extracted_version=$(cat packagedef | grep ".ВерсияСреды(" | sed 's|[^"]*"||' | sed -r 's/".+//' || true)
+ version="${extracted_version:-stable}"
+ else
+ version="${{ inputs.oscript_version }}"
+ fi
+ echo "version=$version" >> $GITHUB_OUTPUT
+
+ - name: Установка OneScript
+ uses: otymko/setup-onescript@v1.5.1
+ with:
+ version: ${{ steps.extract_oscript_version.outputs.version }}
+
+ - name: Установка зависимостей
+ shell: bash
+ run: |
+ if [ -n "${{ inputs.opm_version }}" ]; then
+ opm install opm@${{ inputs.opm_version }}
+ else
+ opm install opm
+ fi
+ opm install -l
+
+ - name: Сборка пакета
+ run: opm build .
+
+ - name: Заливка артефакта пакета
+ uses: actions/upload-artifact@v6
+ with:
+ name: package
+ path: ./*.ospx
+
+ test:
runs-on: ${{ matrix.os }}
+ needs: build-package
+ if: ${{ !cancelled() && (needs.build-package.result == 'success' || needs.build-package.result == 'skipped') }}
env:
LANG: ${{ inputs.locale }}.UTF-8
LC_ALL: ${{ inputs.locale }}.UTF-8
@@ -96,7 +155,7 @@ jobs:
steps:
- name: Актуализация
uses: actions/checkout@v6.0.2
-
+
- name: Установка локали (Windows)
if: startsWith(matrix.os, 'windows')
run: |
@@ -180,9 +239,12 @@ jobs:
if: inputs.additional_oscript_packages != ''
run: opm install -l ${{ inputs.additional_oscript_packages }}
- - name: Сборка пакета
+ - name: Скачивание собранного пакета
if: inputs.build_package == true
- run: opm build .
+ uses: actions/download-artifact@v7
+ with:
+ name: package
+ path: .
- name: Тестирование
if: matrix.test_engine == '1testrunner'
diff --git a/README.md b/README.md
index 710f3ca..2d7eba7 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,7 @@ lib.system=../oscript_modules
| opm_version | Версия opm для установки (например, `1.1.0`).
Если не указано, устанавливается последняя версия без указания конкретной версии.
Используется для обеспечения совместимости с определенными версиями OneScript | |
| additional_oscript_packages | Список дополнительных пакетов oscript для установки, разделенный пробелами | |
| dotnet_version | Версия .NET для установки | |
-| build_package | Выполнить сборку пакета перед выполнением тестов | `false` |
+| build_package | Выполнить сборку пакета перед выполнением тестов.
**Важно:** При значении `true` пакет собирается один раз на `ubuntu-latest` и затем тестируется на всех указанных платформах. Это гарантирует, что одна и та же сборка проверяется везде. | `false` |
| os_versions | Список операционных систем для запуска тестов строкой в формате json-array | `["ubuntu-latest", "windows-latest", "macos-latest"]` |
| test_engine | Фреймворк который будет использован для тестирования, может быть одним из `1testrunner`, `oneunit` | `1testrunner` |
@@ -221,7 +221,7 @@ jobs:
| sonarqube | Флаг отправки результатов анализа на сервер SonarQube | `true` |
| coveralls | Флаг отправки результатов покрытия на портал [coveralls](https://coveralls.io) | `false` |
| dotnet_version | Версия .NET для установки | |
-| build_package | Выполнить сборку пакета перед выполнением тестов | `false` |
+| build_package | Выполнить сборку пакета перед выполнением тестов.
**Важно:** При значении `true` пакет собирается один раз на `ubuntu-latest` и затем используется для тестирования с покрытием. | `false` |
| os_version | Операционная система для запуска контроля качества | `ubuntu-latest` |
| test_engine | Фреймворк который будет использован для тестирования, может быть одним из `1testrunner`, `oneunit` | `1testrunner` |