diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..dd539d0 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,176 @@ +name: CI + +on: + push: + pull_request: + workflow_dispatch: + release: + types: [created] + +jobs: + linux: + strategy: + fail-fast: false + matrix: + include: + - version: 8.3 + branch: PHP-8.3 + - version: 8.4 + branch: PHP-8.4 + - version: 8.5 + branch: master + services: + oracle-11: + image: wnameless/oracle-xe-11g-r2 + ports: + - 1511:1521 + env: + ORACLE_ALLOW_REMOTE: true + oracle-18: + image: gvenzl/oracle-xe:18-slim-faststart + ports: + - 1518:1521 + env: + ORACLE_PASSWORD: my_pass_18 + options: >- + --health-cmd healthcheck.sh + --health-interval 10s + --health-timeout 5s + --health-retries 10 + oracle-21: + image: gvenzl/oracle-xe:21-slim-faststart + ports: + - 1521:1521 + env: + ORACLE_PASSWORD: my_pass_21 + options: >- + --health-cmd healthcheck.sh + --health-interval 10s + --health-timeout 5s + --health-retries 10 + oracle-23: + image: gvenzl/oracle-free:23-slim + ports: + - 1523:1521 + env: + ORACLE_PASSWORD: my_pass_23 + options: >- + --health-cmd healthcheck.sh + --health-interval 10s + --health-timeout 5s + --health-retries 10 + runs-on: ubuntu-latest + steps: + - name: Setup dependencies + run: | + mkdir -p /opt/oracle + for pkg in sdk basiclite; do + curl --no-progress-meter -O https://download.oracle.com/otn_software/linux/instantclient/instantclient-$pkg-linuxx64.zip + unzip -q -o instantclient-$pkg-linuxx64.zip -d /opt/oracle + done + mv /opt/oracle/instantclient_* /opt/oracle/instantclient + sudo ln -sf /opt/oracle/instantclient/*.so* /usr/lib + sudo apt-get -q update && sudo apt-get install libaio-dev -y + sudo ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1 >/dev/null 2>&1 || true + # fix debug build warning: zend_signal: handler was replaced for signal (2) after startup + echo DISABLE_INTERRUPT=on > /opt/oracle/instantclient/network/admin/sqlnet.ora + - name: Checkout + uses: actions/checkout@v4 + - name: Checkout php-src + uses: actions/checkout@v4 + with: + repository: php/php-src + ref: ${{ matrix.branch }} + path: php-src + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{matrix.version}} + - name: Build + run: | + phpize + ./configure --with-php-config=$(command -v php-config) --with-pdo-oci=instantclient,/opt/oracle/instantclient + make -j$(nproc) + sudo make install + echo 'extension=pdo_oci.so' | sudo tee /etc/php/${{ matrix.version }}/mods-available/pdo_oci.ini + sudo phpenmod -v ${{ matrix.version }} pdo_oci + php --ri pdo_oci + - name: Run tests /w Oracle 11 (for PHP 8.3 only) + # https://github.com/php/php-src/pull/18734 + # https://github.com/php/pecl-database-pdo_oci/pull/16#discussion_r2119810891 + if: matrix.version == '8.3' + run: php php-src/run-tests.php --show-diff --show-slow 1000 --set-timeout 120 tests + env: + PDO_TEST_DIR: ${{ github.workspace }}/php-src/ext/pdo/tests + PDO_OCI_TEST_DIR: ${{ github.workspace }}/tests + PDO_OCI_TEST_USER: system + PDO_OCI_TEST_PASS: oracle + PDO_OCI_TEST_DSN: oci:dbname=0.0.0.0:1511/XE;charset=AL32UTF8 + - name: Run tests /w Oracle 18 + if: success() || failure() + run: php php-src/run-tests.php --show-diff --show-slow 1000 --set-timeout 120 tests + env: + PDO_TEST_DIR: ${{ github.workspace }}/php-src/ext/pdo/tests + PDO_OCI_TEST_DIR: ${{ github.workspace }}/tests + PDO_OCI_TEST_USER: system + PDO_OCI_TEST_PASS: my_pass_18 + PDO_OCI_TEST_DSN: oci:dbname=0.0.0.0:1518/XE;charset=AL32UTF8 + - name: Run tests /w Oracle 21 + if: success() || failure() + run: php php-src/run-tests.php --show-diff --show-slow 1000 --set-timeout 120 tests + env: + PDO_TEST_DIR: ${{ github.workspace }}/php-src/ext/pdo/tests + PDO_OCI_TEST_DIR: ${{ github.workspace }}/tests + PDO_OCI_TEST_USER: system + PDO_OCI_TEST_PASS: my_pass_21 + PDO_OCI_TEST_DSN: oci:dbname=0.0.0.0:1521/XE;charset=AL32UTF8 + - name: Run tests /w Oracle 23 + if: success() || failure() + run: php php-src/run-tests.php --show-diff --show-slow 1000 --set-timeout 120 tests + env: + PDO_TEST_DIR: ${{ github.workspace }}/php-src/ext/pdo/tests + PDO_OCI_TEST_DIR: ${{ github.workspace }}/tests + PDO_OCI_TEST_USER: system + PDO_OCI_TEST_PASS: my_pass_23 + PDO_OCI_TEST_DSN: oci:dbname=0.0.0.0:1523/FREEPDB1;charset=AL32UTF8 + + windows-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.extension-matrix.outputs.matrix }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Create matrix + id: extension-matrix + uses: php/php-windows-builder/extension-matrix@v1 + with: + php-version-list: '8.3, 8.4, master' + + windows: + needs: windows-matrix + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: ${{fromJson(needs.windows-matrix.outputs.matrix)}} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build + uses: php/php-windows-builder/extension@v1 + with: + php-version: ${{ matrix.php-version }} + arch: ${{ matrix.arch }} + ts: ${{ matrix.ts }} + libs: instantclient + + windows-release: + runs-on: ubuntu-latest + needs: windows + if: ${{ github.event_name == 'release' }} + steps: + - name: Upload release artifact + uses: php/php-windows-builder/release@v1 + with: + release: ${{ github.event.release.tag_name }} + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/tests/bug44301.phpt b/tests/bug44301.phpt index 5bf670d..ce9fe62 100644 --- a/tests/bug44301.phpt +++ b/tests/bug44301.phpt @@ -24,5 +24,5 @@ try { $db = null; ?> --EXPECTF-- -SQLSTATE[HY000]: General error: 942 OCIStmtExecute: ORA-00942: table or view %sdoes not exist - (%s%epdo_oci%eoci_statement.c:%d) +SQLSTATE[HY000]: General error: 942 OCIStmtExecute: ORA-00942: table or view %Sdoes not exist + (%soci_statement.c:%d) diff --git a/tests/bug_33707.phpt b/tests/bug_33707.phpt index 8a985b4..0836aa3 100644 --- a/tests/bug_33707.phpt +++ b/tests/bug_33707.phpt @@ -26,6 +26,6 @@ array(3) { [1]=> int(942) [2]=> - string(%d) "OCIStmtExecute: ORA-00942: table or view %sdoes not exist + string(%d) "OCIStmtExecute: ORA-00942: table or view %Sdoes not exist (%s:%d)" } diff --git a/tests/pdo_oci_stmt_getcolumnmeta.phpt b/tests/pdo_oci_stmt_getcolumnmeta.phpt index a134359..16384fe 100644 --- a/tests/pdo_oci_stmt_getcolumnmeta.phpt +++ b/tests/pdo_oci_stmt_getcolumnmeta.phpt @@ -7,6 +7,8 @@ pdo_oci getAttribute(PDO::ATTR_SERVER_VERSION), 12) < 0) die('xfail CI is failing with Oracle XE 11g'); ?> --FILE--