diff --git a/.forgejo/workflows/check-version-exists.yaml b/.forgejo/workflows/check-version-exists.yaml deleted file mode 100644 index e2baaa4..0000000 --- a/.forgejo/workflows/check-version-exists.yaml +++ /dev/null @@ -1,34 +0,0 @@ -on: - workflow_call: - inputs: - github-repository: - required: true - type: string - pypi-package: - required: true - type: string - pypi-base-url: - required: true - type: string - outputs: - version: ${{ jobs.check-version-exists.outputs.version }} - -jobs: - check-version-exists: - runs-on: ubuntu-latest - - outputs: - version: ${{ steps.check.outputs.version }} - - steps: - - uses: actions/checkout@v4 - - - id: check - run: | - pip3 install requests - exec python3 .forgejo/workflows/check_version_exists.py >> $GITHUB_OUTPUT - env: - REPOSITORY: ${{ inputs.github-repository }} - PACKAGE: ${{ inputs.pypi-package}} - BASE_URL: ${{ inputs.pypi-base-url}} - diff --git a/.forgejo/workflows/check_version_exists.py b/.forgejo/workflows/check_version_exists.py deleted file mode 100644 index d6efa40..0000000 --- a/.forgejo/workflows/check_version_exists.py +++ /dev/null @@ -1,37 +0,0 @@ -#/usr/bin/env python3 - -import os -import re -import sys -import requests - - -def get_github_version(repository: str) -> str: - res = requests.get(f"https://api.github.com/repos/{repository}/releases/latest").json() - return res["tag_name"].removeprefix("v") - - -def does_pypi_version_exist(base_url: str, package: str, version: str) -> bool: - base_url = base_url.removesuffix("/") - version = version.replace(".", "\\.") - - body = requests.get(f"{base_url}/simple/{package}").text - return len(re.findall(rf"{package}-{version}-.+", body, re.MULTILINE)) > 0 - - -def main(): - repository = os.environ["REPOSITORY"] - package = os.environ["PACKAGE"] - base_url = os.environ["FORGEJO_URL"] - - version = get_github_version(repository) - - if does_pypi_version_exist(base_url, package, version): - sys.exit(0) - - print(f"version=v{version}") - - -if __name__ == "__main__": - main() - diff --git a/.forgejo/workflows/ocb.yaml b/.forgejo/workflows/ocb.yaml new file mode 100644 index 0000000..ba91c0b --- /dev/null +++ b/.forgejo/workflows/ocb.yaml @@ -0,0 +1,66 @@ +name: Build OCB + +on: + workflow_dispatch: + schedule: + - cron: "0 10 * * 0" + push: + branches: ["main"] + paths: [".forgejo/workflows/ocb.yaml", "OCB/**/*"] + +env: + REPOSITORY_URL: https://cmwedding-bot:${{ secrets.FORGEJO_TOKEN }}@git.weddingfactory.eu/api/packages/cmwedding/pypi + ODOO_VERSION: "18.0" + +jobs: + check-version-exists: + runs-on: ubuntu-latest + + outputs: + version: ${{ steps.check.outputs.version }} + + steps: + - id: check + uses: https://git.weddingfactory.eu/cmwedding/wheels@e8bb95db412835102b1ff58a955d29f00fd2f87f + with: + pypi-base-url: ${{ env.REPOSITORY_URL }} + pypi-package: odoo + github-repository: "OCA/OCB" + unstable-branch: ${{ env.ODOO_VERSION }} + + build: + name: Build wheels + runs-on: self-hosted + + needs: check-version-exists + if: needs.check-version-exists.outputs.version != '' + + steps: + - run: git clone --depth=1 https://github.com/OCA/OCB --branch ${{ env.ODOO_VERSION }} . + + - name: Patch source + run: | + rm pyproject.toml + wget "https://git.weddingfactory.eu/cmwedding/wheels/raw/branch/main/OCB/pyproject.toml" + sed -i 's/%s/${{ needs.check-version-exists.outputs.version }}/' pyproject.toml + + - name: Setup dependencies + run: | + python3 -m venv .venv + source .venv/bin/activate + + pip3 install build wheel setuptools twine + pip3 install --index-url https://git.weddingfactory.eu/api/packages/cmwedding/pypi/simple/ psycopg2 pycairo + + - name: Build pure Python wheel + run: | + source .venv/bin/activate + python3 -m build --wheel + + - name: Publish package distributions to Forgejo + run: | + source .venv/bin/activate + python3 -m twine upload ./dist/* + env: + TWINE_REPOSITORY_URL: ${{ env.REPOSITORY_URL }} + TWINE_NON_INTERACTIVE: 1 diff --git a/.forgejo/workflows/psycopg2.yaml b/.forgejo/workflows/psycopg2.yaml new file mode 100644 index 0000000..c3ecab5 --- /dev/null +++ b/.forgejo/workflows/psycopg2.yaml @@ -0,0 +1,58 @@ +name: Build psycopg2 + +on: + workflow_dispatch: + schedule: + - cron: "0 10 * * 0" + push: + branches: ["main"] + paths: [".forgejo/workflows/psycopg2.yaml"] + +env: + REPOSITORY_URL: https://cmwedding-bot:${{ secrets.FORGEJO_TOKEN }}@git.weddingfactory.eu/api/packages/cmwedding/pypi + +jobs: + check-version-exists: + runs-on: ubuntu-latest + + outputs: + version: ${{ steps.check.outputs.version }} + + steps: + - id: check + uses: https://git.weddingfactory.eu/cmwedding/wheels@f3ba8cbc3c3e080b14c8f244e531eaf36102959a + with: + pypi-base-url: ${{ env.REPOSITORY_URL }} + pypi-package: psycopg2 + github-repository: "psycopg/psycopg2" + + build: + name: Build wheels on ${{ matrix.os }} + + needs: check-version-exists + if: needs.check-version-exists.outputs.version != '' + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - run: git clone --depth=1 https://github.com/psycopg/psycopg2 --branch ${{ needs.check-version-exists.outputs.version }} . + + - name: Build wheels + uses: https://github.com/pypa/cibuildwheel@v2.23.3 + env: + CIBW_BEFORE_ALL_LINUX: "dnf install -y postgresql-devel" + CIBW_BUILD: "cp31{0..3}-manylinux_{x86_64,aarch64}" + CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 + CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28 + + - name: Publish package distributions to Forgejo + run: | + pip3 install twine + python3 -m twine upload ./wheelhouse/* + env: + TWINE_REPOSITORY_URL: ${{ env.REPOSITORY_URL }} + TWINE_NON_INTERACTIVE: 1 + diff --git a/.forgejo/workflows/pycairo.yaml b/.forgejo/workflows/pycairo.yaml index 6e7631c..8e00402 100644 --- a/.forgejo/workflows/pycairo.yaml +++ b/.forgejo/workflows/pycairo.yaml @@ -4,6 +4,9 @@ on: workflow_dispatch: schedule: - cron: "0 10 * * 0" + push: + branches: ["main"] + paths: [".forgejo/workflows/pycairo.yaml"] env: REPOSITORY_URL: https://cmwedding-bot:${{ secrets.FORGEJO_TOKEN }}@git.weddingfactory.eu/api/packages/cmwedding/pypi @@ -11,17 +14,23 @@ env: jobs: check-version-exists: runs-on: ubuntu-latest - uses: ./.forgejo/workflows/check-version-exists.yaml - with: - pypi-base-url: ${{ env.REPOSITORY_URL }} - pypi-package: pycairo - github-repository: "pygobject/pycairo" + + outputs: + version: ${{ steps.check.outputs.version }} + + steps: + - id: check + uses: https://git.weddingfactory.eu/cmwedding/wheels@f3ba8cbc3c3e080b14c8f244e531eaf36102959a + with: + pypi-base-url: ${{ env.REPOSITORY_URL }} + pypi-package: pycairo + github-repository: "pygobject/pycairo" build: name: Build wheels on ${{ matrix.os }} needs: check-version-exists - if: needs.check-version-exists.outputs.version != "" + if: needs.check-version-exists.outputs.version != '' runs-on: ${{ matrix.os }} strategy: @@ -29,7 +38,7 @@ jobs: os: [ubuntu-latest] steps: - - run: git clone --depth=1 https://github.com/pygobject/pycairo --branch ${{ needs.check-version-exists.outputs.version }} . + - run: git clone --depth=1 https://github.com/pygobject/pycairo --branch v${{ needs.check-version-exists.outputs.version }} . - name: Build wheels uses: https://github.com/pypa/cibuildwheel@v2.23.3 diff --git a/OCB/pyproject.toml b/OCB/pyproject.toml new file mode 100644 index 0000000..e352e4a --- /dev/null +++ b/OCB/pyproject.toml @@ -0,0 +1,19 @@ +[project] +name = "odoo" +version = "%s" +dynamic = [ + "optional-dependencies", + "dependencies", + "classifiers", + "authors", + "license", + "requires-python", + "readme", + "description" +] + +[build-system] +requires = ["setuptools>=41"] +build-backend = "pep517_odoo" +backend-path = ["setup"] +