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` |