diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml new file mode 100644 index 0000000..7f3802e --- /dev/null +++ b/.github/workflows/integration-test.yml @@ -0,0 +1,155 @@ +# SPDX-FileCopyrightText: Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later + +name: Integration test + +on: + pull_request: + push: + branches: + - main + - stable* + +env: + APP_NAME: translate2 + +concurrency: + group: integration-test-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + + +jobs: + transcription: + runs-on: ubuntu-latest + + strategy: + # do not stop on another job's failure + fail-fast: false + matrix: + php-versions: [ '8.1' ] + databases: [ 'sqlite' ] + server-versions: [ 'master' ] + + name: Integration test on ${{ matrix.server-versions }} php@${{ matrix.php-versions }} + + env: + MYSQL_PORT: 4444 + PGSQL_PORT: 4445 + + services: + mysql: + image: mariadb:10.5 + ports: + - 4444:3306/tcp + env: + MYSQL_ROOT_PASSWORD: rootpassword + options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 5 + postgres: + image: postgres + ports: + - 4445:5432/tcp + env: + POSTGRES_USER: root + POSTGRES_PASSWORD: rootpassword + POSTGRES_DB: nextcloud + options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5 + + steps: + - name: Checkout server + uses: actions/checkout@v4 + with: + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout submodules + shell: bash + run: | + auth_header="$(git config --local --get http.https://github.com/.extraheader)" + git submodule sync --recursive + git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-versions }} + tools: phpunit + extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_mysql, pdo_sqlite, pgsql, pdo_pgsql, gd, zip + + - name: Checkout app + uses: actions/checkout@v4 + with: + path: ${{ env.APP_NAME }} + + - name: Checkout AppAPI + uses: actions/checkout@v4 + with: + repository: cloud-py-api/app_api + path: apps/app_api + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@v3 + id: versions + with: + path: apps/${{ env.APP_NAME }} + fallbackNode: '^20' + fallbackNpm: '^10' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@v4 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}" + + - name: Set up Nextcloud + if: ${{ matrix.databases != 'pgsql'}} + run: | + sleep 25 + mkdir data + ./occ maintenance:install --verbose --database=${{ matrix.databases }} --database-name=nextcloud --database-host=127.0.0.1 --database-port=$MYSQL_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + php -S localhost:8080 & + + - name: Set up Nextcloud + if: ${{ matrix.databases == 'pgsql'}} + run: | + sleep 25 + mkdir data + ./occ maintenance:install --verbose --database=${{ matrix.databases }} --database-name=nextcloud --database-host=127.0.0.1 --database-port=$PGSQL_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + php -S localhost:8080 & + + - name: Enable app and app_api + run: ./occ app:enable -vvv -f app_api + + - name: Setup python 3.11 + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install and init backend + env: + PYTHONUNBUFFERED: 1 + APP_HOST: 0.0.0.0; + APP_ID: translate2 + APP_PORT: 9081 + APP_SECRET: 12345 + APP_VERSION: 1.0.0 + NEXTCLOUD_URL: http://localhost:8080 + working-directory: ${{ env.APP_NAME }} + run: | + pip install -r requirements.txt + python3 lib/main.py & + + - name: Register backend + run: | + ./occ app_api:daemon:register --net host manual_install "Manual Install" manual-install http localhost http://localhost:8080 + ./occ app_api:app:register translate2 manual_install --json-info "{\"appid\":\"translate2\",\"name\":\"Local Machine Translation\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"port\":9081,\"scopes\":[\"AI_PROVIDERS\"],\"system_app\":0}" --force-scopes --wait-finish + + - name: Scan files + run: | + curl --header "Content-Type: application/json" -X POST http://localhost:8080/ocs/v2.php/translation/translate --data '{"text":"Hallo Welt","fromLanguage":"de","toLanguage":"en"}' + + - name: Show log on failure + if: always() + run: | + tail data/nextcloud.log \ No newline at end of file