name: tests on: pull_request: branches: - "20.0*" push: branches: - "20.0" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: unreleased-deps: runs-on: ubuntu-latest name: Detect unreleased dependencies steps: - uses: actions/checkout@v7 - run: | for reqfile in requirements.txt test-requirements.txt ; do if [ -f ${reqfile} ] ; then result=0 # reject non-comment lines that contain a / (i.e. URLs, relative paths) # unless they have a "# SKIP TEST" comment grep "^[^#].*/" ${reqfile} | grep -v "# SKIP TEST" || result=$? if [ $result -eq 0 ] ; then echo "Unreleased dependencies found in ${reqfile}." exit 1 fi fi done test: runs-on: ubuntu-latest container: ${{ matrix.container }} name: ${{ matrix.name }} permissions: pull-requests: write contents: write strategy: fail-fast: false matrix: include: - container: ghcr.io/oca/oca-ci/py3.12-odoo20.0:latest name: test with Odoo Community odoo_enterprise : 0 exclude_modules : "" - container: ghcr.io/oca/oca-ci/py3.12-odoo20.0:latest name: test with Odoo Enterprise odoo_enterprise : 1 exclude_modules : "" makepot: "true" services: postgres: image: postgres:16 env: POSTGRES_USER: odoo POSTGRES_PASSWORD: odoo POSTGRES_DB: odoo ports: - 5432:5432 env: INSTALL_ADDONS_DIR: "/tmp/addons-merged" ADDITIONAL_ADDONS_DIR: "/tmp/additional-addons" steps: - uses: actions/checkout@v7 with: persist-credentials: false - name: Upgrade pip in container run: python -m pip install --upgrade pip - name: Install Odoo upgrade util run: python -m pip install git+https://github.com/odoo/upgrade-util@master - name: Add Noviat CI Tools to PATH run: | git clone https://${{ secrets.PRIVATE_TOKEN }}@github.com/Noviat-CI/noviat-ci-tools.git /opt/noviat-ci-tools echo "/opt/noviat-ci-tools" >> $GITHUB_PATH - name: Clone Odoo Enterprise if: ${{ matrix.odoo_enterprise == 1 }} run : | git clone https://${{ secrets.PRIVATE_TOKEN }}@github.com/odoo/enterprise.git --depth 1 -b 20.0 /opt/enterprise - name: Clone Noviat Dependencies env: PRIVATE_TOKEN: ${{ secrets.PRIVATE_TOKEN }} run: clone_oca_dependencies_by_noviat - name: Create addons path run: | mkdir -p ${{ env.INSTALL_ADDONS_DIR }}/setup find $(realpath $ADDONS_DIR) $(realpath ${{ env.ADDITIONAL_ADDONS_DIR }}) -name __manifest__.py -exec sh -c 'ln -s "$(dirname "$0")" "${{ env.INSTALL_ADDONS_DIR }}"' {} \; find $(realpath $ADDONS_DIR) $(realpath ${{ env.ADDITIONAL_ADDONS_DIR }}) -iwholename '*/setup/*/setup.py' -exec sh -c 'ln -s "$(dirname "$0")" "${{ env.INSTALL_ADDONS_DIR }}/setup"' {} \; if [ -n ${{ matrix.exclude}} ] then remove_excluded_modules ${{ env.INSTALL_ADDONS_DIR }} ${{ matrix.exclude }} fi - name: Update addons path with enterprise if: ${{ matrix.odoo_enterprise == 1 }} run: | echo "ADDONS_PATH=/opt/odoo/addons,/opt/enterprise,${{ env.INSTALL_ADDONS_DIR }}" >> $GITHUB_ENV - name: Update addons path without enterprise if: ${{ matrix.odoo_enterprise == 0 }} run: | echo "ADDONS_PATH=/opt/odoo/addons,${{ env.INSTALL_ADDONS_DIR }}" >> $GITHUB_ENV - name: Inject GitHub token for Noviat orgs in test-requirements.txt run: | sed -i -E "s#https://github.com/(Noviat-(Projects|Generic|ARP|Internal))#https://${{ secrets.PRIVATE_TOKEN }}@github.com/\1#g" test-requirements.txt - name: Install addons and dependencies run: | (ADDONS_PATH=${ADDONS_PATH} ADDONS_DIR=${INSTALL_ADDONS_DIR} oca_install_addons) - name: Install external dependencies of core addons (not in Odoo requirements.txt) run: | (ADDONS_DIR=${INSTALL_ADDONS_DIR} noviat_install_odoo_external_dependencies) - name: Initialize test db run: oca_init_test_database - name: Run tests run: oca_run_tests - name: Generate coverage files run: | coverage report -m coverage xml -o coverage.xml - name: Code Coverage Summary Report uses: irongut/CodeCoverageSummary@v1.3.0 with: filename: 'coverage.xml' badge: true format: 'markdown' output: 'both' hide_complexity: true - name: Write to Job Summary run: cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY - name: Update .pot files run: noviat_export_and_push_pot https://x-access-token:${{ secrets.PRIVATE_TOKEN }}@github.com/${{ github.repository }} if: ${{ matrix.makepot == 'true' && github.event_name == 'push' }}