From ca1703708741d91fbeed07381702aa595d5480e6 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Mon, 23 Dec 2024 19:46:22 +0100 Subject: [PATCH 01/40] CLI command for starting wsgi server --- caddysnake.go | 2 + cmd/cli/main.go | 173 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 cmd/cli/main.go diff --git a/caddysnake.go b/caddysnake.go index f7772f8..0ed45ec 100644 --- a/caddysnake.go +++ b/caddysnake.go @@ -113,6 +113,8 @@ func (f *CaddySnake) Provision(ctx caddy.Context) error { if err != nil { return err } + } else { + return errors.New("asgi or wsgi app needs to be specified") } return nil } diff --git a/cmd/cli/main.go b/cmd/cli/main.go new file mode 100644 index 0000000..4fc275f --- /dev/null +++ b/cmd/cli/main.go @@ -0,0 +1,173 @@ +package main + +import ( + "encoding/json" + "errors" + "log" + "os" + "strconv" + "time" + + "github.com/caddyserver/caddy/v2" + "github.com/caddyserver/caddy/v2/caddyconfig" + caddycmd "github.com/caddyserver/caddy/v2/cmd" + "github.com/caddyserver/caddy/v2/modules/caddyhttp" + "github.com/caddyserver/certmagic" + caddysnake "github.com/mliezun/caddy-snake" + "github.com/spf13/cobra" + "go.uber.org/zap/zapcore" + + // plug in Caddy modules here + + "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode" + _ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode/gzip" + _ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode/zstd" +) + +func main() { + caddycmd.RegisterCommand(caddycmd.Command{ + Name: "wsgi-server", + Usage: "[--domain ] [--app ] [--listen ]", + Short: "Spins up a Python wsgi server", + Long: ` +A Python WSGI server designed for development, demonstrations, and lightweight production use. + +You can specify a custom socket address using the '--listen' option. + +Providing a domain name with the '--domain' flag enables HTTPS and sets the listener to the appropriate secure port. +Ensure DNS A/AAAA records are correctly set up if using a public domain for secure connections. +`, + CobraFunc: func(cmd *cobra.Command) { + cmd.Flags().StringP("domain", "d", "", "Domain name at which to serve the files") + cmd.Flags().StringP("app", "a", "", "App module to be imported") + cmd.Flags().StringP("listen", "l", "", "The address to which to bind the listener") + cmd.Flags().Bool("debug", false, "Enable debug logs") + cmd.Flags().Bool("access-logs", false, "Enable access logs") + cmd.RunE = caddycmd.WrapCommandFuncForCobra(cmdWsgiServer) + }, + }) + caddycmd.Main() +} + +// cmdWsgiServer is freely inspired from the php-server command of the Frankenphp project (MIT License) +func cmdWsgiServer(fs caddycmd.Flags) (int, error) { + caddy.TrapSignals() + + domain := fs.String("domain") + app := fs.String("app") + listen := fs.String("listen") + debug := fs.Bool("debug") + accessLogs := fs.Bool("access-logs") + + if app == "" { + return caddy.ExitCodeFailedStartup, errors.New("--app is required") + } + + gzip, err := caddy.GetModule("http.encoders.gzip") + if err != nil { + return caddy.ExitCodeFailedStartup, err + } + + zstd, err := caddy.GetModule("http.encoders.zstd") + if err != nil { + return caddy.ExitCodeFailedStartup, err + } + + encodings := caddy.ModuleMap{ + "zstd": caddyconfig.JSON(zstd.New(), nil), + "gzip": caddyconfig.JSON(gzip.New(), nil), + } + prefer := []string{"zstd", "gzip"} + + pythonHandler := caddysnake.CaddySnake{ + ModuleWsgi: app, + } + if venv := os.Getenv("VIRTUAL_ENV"); venv != "" { + pythonHandler.VenvPath = venv + } + + mainRoute := caddyhttp.Route{ + MatcherSetsRaw: []caddy.ModuleMap{ + { + "path": caddyconfig.JSON(caddyhttp.MatchPath{"/*"}, nil), + }, + }, + HandlersRaw: []json.RawMessage{ + caddyconfig.JSONModuleObject(encode.Encode{ + EncodingsRaw: encodings, + Prefer: prefer, + }, "handler", "encode", nil), + caddyconfig.JSONModuleObject(pythonHandler, "handler", "python", nil), + }, + } + + subroute := caddyhttp.Subroute{ + Routes: caddyhttp.RouteList{mainRoute}, + } + + route := caddyhttp.Route{ + HandlersRaw: []json.RawMessage{caddyconfig.JSONModuleObject(subroute, "handler", "subroute", nil)}, + } + + if domain != "" { + route.MatcherSetsRaw = []caddy.ModuleMap{ + { + "host": caddyconfig.JSON(caddyhttp.MatchHost{domain}, nil), + }, + } + } + + server := &caddyhttp.Server{ + ReadHeaderTimeout: caddy.Duration(10 * time.Second), + IdleTimeout: caddy.Duration(30 * time.Second), + MaxHeaderBytes: 1024 * 10, + Routes: caddyhttp.RouteList{route}, + } + if listen == "" { + if domain == "" { + listen = ":9080" + } else { + listen = ":" + strconv.Itoa(certmagic.HTTPSPort) + } + } + server.Listen = []string{listen} + + if accessLogs { + server.Logs = &caddyhttp.ServerLogConfig{} + } + + httpApp := caddyhttp.App{ + Servers: map[string]*caddyhttp.Server{"srv0": server}, + } + + var f bool + cfg := &caddy.Config{ + Admin: &caddy.AdminConfig{ + Disabled: false, + Config: &caddy.ConfigSettings{ + Persist: &f, + }, + }, + AppsRaw: caddy.ModuleMap{ + "http": caddyconfig.JSON(httpApp, nil), + }, + } + + if debug { + cfg.Logging = &caddy.Logging{ + Logs: map[string]*caddy.CustomLog{ + "default": { + BaseLog: caddy.BaseLog{Level: zapcore.DebugLevel.CapitalString()}, + }, + }, + } + } + + if err := caddy.Run(cfg); err != nil { + return caddy.ExitCodeFailedStartup, err + } + + log.Printf("Serving Python app on %s", listen) + + select {} +} From 8a153b5223d159affbc03ac54d3a13532d425e99 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Mon, 23 Dec 2024 19:55:24 +0100 Subject: [PATCH 02/40] CLI command for ASGI server --- cmd/cli/main.go | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 4fc275f..ff99997 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -27,10 +27,10 @@ import ( func main() { caddycmd.RegisterCommand(caddycmd.Command{ Name: "wsgi-server", - Usage: "[--domain ] [--app ] [--listen ]", + Usage: "[--domain ] [--app ] [--listen ] [--debug] [--access-logs]", Short: "Spins up a Python wsgi server", Long: ` -A Python WSGI server designed for development, demonstrations, and lightweight production use. +A Python WSGI server designed for synchronous apps and frameworks (no async/await). You can specify a custom socket address using the '--listen' option. @@ -46,11 +46,41 @@ Ensure DNS A/AAAA records are correctly set up if using a public domain for secu cmd.RunE = caddycmd.WrapCommandFuncForCobra(cmdWsgiServer) }, }) + + caddycmd.RegisterCommand(caddycmd.Command{ + Name: "asgi-server", + Usage: "[--domain ] [--app ] [--listen ] [--debug] [--access-logs]", + Short: "Spins up a Python asgi server", + Long: ` +A Python ASGI server designed for asynchronous apps and frameworks (use of async/await). + +You can specify a custom socket address using the '--listen' option. + +Providing a domain name with the '--domain' flag enables HTTPS and sets the listener to the appropriate secure port. +Ensure DNS A/AAAA records are correctly set up if using a public domain for secure connections. +`, + CobraFunc: func(cmd *cobra.Command) { + cmd.Flags().StringP("domain", "d", "", "Domain name at which to serve the files") + cmd.Flags().StringP("app", "a", "", "App module to be imported") + cmd.Flags().StringP("listen", "l", "", "The address to which to bind the listener") + cmd.Flags().Bool("debug", false, "Enable debug logs") + cmd.Flags().Bool("access-logs", false, "Enable access logs") + cmd.RunE = caddycmd.WrapCommandFuncForCobra(cmdAsgiServer) + }, + }) caddycmd.Main() } -// cmdWsgiServer is freely inspired from the php-server command of the Frankenphp project (MIT License) func cmdWsgiServer(fs caddycmd.Flags) (int, error) { + return pythonServer("wsgi", fs) +} + +func cmdAsgiServer(fs caddycmd.Flags) (int, error) { + return pythonServer("asgi", fs) +} + +// pythonServer is inspired on the php-server command of the Frankenphp project (MIT License) +func pythonServer(server_type string, fs caddycmd.Flags) (int, error) { caddy.TrapSignals() domain := fs.String("domain") @@ -79,8 +109,11 @@ func cmdWsgiServer(fs caddycmd.Flags) (int, error) { } prefer := []string{"zstd", "gzip"} - pythonHandler := caddysnake.CaddySnake{ - ModuleWsgi: app, + pythonHandler := caddysnake.CaddySnake{} + if server_type == "wsgi" { + pythonHandler.ModuleWsgi = app + } else { + pythonHandler.ModuleAsgi = app } if venv := os.Getenv("VIRTUAL_ENV"); venv != "" { pythonHandler.VenvPath = venv From da5eadda1d2b2092f0902278ee6c0330e260c9e4 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Mon, 23 Dec 2024 19:58:04 +0100 Subject: [PATCH 03/40] Go mod tidy --- go.mod | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index c5399e2..ba4e354 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,9 @@ go 1.21.6 require ( github.com/caddyserver/caddy/v2 v2.7.6 + github.com/caddyserver/certmagic v0.20.0 github.com/gorilla/websocket v1.4.1 + github.com/spf13/cobra v1.7.0 go.uber.org/zap v1.26.0 ) @@ -18,7 +20,6 @@ require ( github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/aryann/difflib v0.0.0-20210328193216-ff5ff6dc229b // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/caddyserver/certmagic v0.20.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect @@ -83,7 +84,6 @@ require ( github.com/smallstep/nosql v0.6.0 // indirect github.com/smallstep/truststore v0.12.1 // indirect github.com/spf13/cast v1.4.1 // indirect - github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stoewer/go-strcase v1.2.0 // indirect github.com/tailscale/tscert v0.0.0-20230806124524-28a91b69a046 // indirect From 3e12d98eae82a10998ecd38c721dab76ed005a95 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Mon, 23 Dec 2024 21:38:40 +0100 Subject: [PATCH 04/40] Python build packages --- .github/workflows/python-build.yml | 46 ++++++++++++++++++++++++++++++ .gitignore | 3 ++ cmd/cli/cli.py | 12 ++++++++ cmd/cli/pyproject.toml | 46 ++++++++++++++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 .github/workflows/python-build.yml create mode 100644 cmd/cli/cli.py create mode 100644 cmd/cli/pyproject.toml diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml new file mode 100644 index 0000000..4ba5cf3 --- /dev/null +++ b/.github/workflows/python-build.yml @@ -0,0 +1,46 @@ +--- + name: Go Tests + on: + pull_request: + branches: + - main + push: + branches: + - main + permissions: + contents: write + jobs: + tests: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13'] + env: + GOEXPERIMENT: cgocheck2 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: '1.21' + cache: false + - name: Install Xcaddy + run: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest + - name: Set up Python ${{ matrix.python-version }} + run: | + export DEBIAN_FRONTEND=noninteractive + sudo apt-get update -yyqq + sudo apt-get install -yyqq software-properties-common + sudo add-apt-repository -y ppa:deadsnakes/ppa + sudo apt-get install -yyqq python${{ matrix.python-version }}-dev python${{ matrix.python-version }}-venv + sudo mv /usr/lib/x86_64-linux-gnu/pkgconfig/python-${{ matrix.python-version }}-embed.pc /usr/lib/x86_64-linux-gnu/pkgconfig/python3-embed.pc + - name: Install global python dependencies + run: sudo pip install requests + - name: Run module tests + run: go test -race -v ./... + - name: Build the CLI + run: | + cd cmd/cli + CGO_ENABLED=1 go build -o caddysnake-cli main.go + export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 + cibuildwheel diff --git a/.gitignore b/.gitignore index f53a9bb..c853d04 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ __pycache__ # Local python builds Python-3.12* +cmd/cli/*.egg-info +cmd/cli/dist +cmd/cli/caddysnake-cli # macOS diff --git a/cmd/cli/cli.py b/cmd/cli/cli.py new file mode 100644 index 0000000..8dd8e3f --- /dev/null +++ b/cmd/cli/cli.py @@ -0,0 +1,12 @@ +import os +import sys + + +def main(): + binary_path = os.path.join(os.path.dirname(__file__), "caddysnake-cli") + + if not os.path.exists(binary_path): + print(f"caddysnake-cli binary file not found at {binary_path}") + sys.exit(1) + + os.execv(binary_path, [binary_path] + sys.argv[1:]) diff --git a/cmd/cli/pyproject.toml b/cmd/cli/pyproject.toml new file mode 100644 index 0000000..1965eb8 --- /dev/null +++ b/cmd/cli/pyproject.toml @@ -0,0 +1,46 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "caddysnake" +version = "0.1.4" +description = "Python WSGI/ASGI server powered by Caddy" +authors = [ + {name = "Miguel Liezun", email = "liezun.js@gmail.com"}, +] +readme = "README.md" +requires-python = ">=3.10" +classifiers = [ + "Development Status :: 3 - Alpha", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Go", +] + +[project.urls] +Homepage = "https://github.com/mliezun/caddy-snake" +Repository = "https://github.com/mliezun/caddy-snake.git" +# Documentation = "https://caddy-snake.readthedocs.io/" + +[tool.setuptools] +packages = ["caddysnake"] +include-package-data = true + +[tool.setuptools.package-dir] +caddysnake = "." + +[tool.setuptools.package-data] +caddysnake = ["caddysnake-cli"] + +[project.scripts] +caddysnake = "caddysnake.cli:main" + +[tool.cibuildwheel] +before-all = "uname -a" From bf1fe65f2b7040ce4947c77dc98f43a66d55c5fc Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Mon, 23 Dec 2024 21:42:37 +0100 Subject: [PATCH 05/40] Fix cibuildwheel --- .github/workflows/python-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 4ba5cf3..8d5ced8 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -1,5 +1,5 @@ --- - name: Go Tests + name: Python Build Package on: pull_request: branches: @@ -10,7 +10,7 @@ permissions: contents: write jobs: - tests: + build: runs-on: ubuntu-22.04 strategy: fail-fast: false @@ -34,10 +34,10 @@ sudo add-apt-repository -y ppa:deadsnakes/ppa sudo apt-get install -yyqq python${{ matrix.python-version }}-dev python${{ matrix.python-version }}-venv sudo mv /usr/lib/x86_64-linux-gnu/pkgconfig/python-${{ matrix.python-version }}-embed.pc /usr/lib/x86_64-linux-gnu/pkgconfig/python3-embed.pc - - name: Install global python dependencies - run: sudo pip install requests - name: Run module tests run: go test -race -v ./... + - name: Install cibuildwheel + run: sudo pip install cibuildwheel - name: Build the CLI run: | cd cmd/cli From 7675ae30c74e9f219ad42f5f56587d913a0ecb8a Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 00:32:18 +0100 Subject: [PATCH 06/40] CIBW_BUILD_VERBOSITY --- .github/workflows/python-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 8d5ced8..97786d0 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -43,4 +43,4 @@ cd cmd/cli CGO_ENABLED=1 go build -o caddysnake-cli main.go export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 - cibuildwheel + CIBW_BUILD_VERBOSITY=1 cibuildwheel From e038f6aff4622cd5e94237a9fe4c634ee62881f3 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 00:52:22 +0100 Subject: [PATCH 07/40] Use dummy.c to generate platform package --- cmd/cli/dummy.c | 0 cmd/cli/pyproject.toml | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 cmd/cli/dummy.c diff --git a/cmd/cli/dummy.c b/cmd/cli/dummy.c new file mode 100644 index 0000000..e69de29 diff --git a/cmd/cli/pyproject.toml b/cmd/cli/pyproject.toml index 1965eb8..d047190 100644 --- a/cmd/cli/pyproject.toml +++ b/cmd/cli/pyproject.toml @@ -32,6 +32,9 @@ Repository = "https://github.com/mliezun/caddy-snake.git" [tool.setuptools] packages = ["caddysnake"] include-package-data = true +ext-modules = [ + {name = "caddysnake.dummy", sources = ["dummy.c"]} +] [tool.setuptools.package-dir] caddysnake = "." From 9031c4c63d824e5884b7044900e803353b38d6c1 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 00:54:54 +0100 Subject: [PATCH 08/40] Only write dummy.c after compiling go --- .github/workflows/python-build.yml | 1 + .gitignore | 1 + cmd/cli/dummy.c | 0 3 files changed, 2 insertions(+) delete mode 100644 cmd/cli/dummy.c diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 97786d0..89a6ce8 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -42,5 +42,6 @@ run: | cd cmd/cli CGO_ENABLED=1 go build -o caddysnake-cli main.go + touch dummy.c export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 CIBW_BUILD_VERBOSITY=1 cibuildwheel diff --git a/.gitignore b/.gitignore index c853d04..1fecb44 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ Python-3.12* cmd/cli/*.egg-info cmd/cli/dist cmd/cli/caddysnake-cli +cmd/cli/dummy.* # macOS diff --git a/cmd/cli/dummy.c b/cmd/cli/dummy.c deleted file mode 100644 index e69de29..0000000 From 0e702cb6bbb6d954134eabe77c1a6452eb0c17c9 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 01:14:12 +0100 Subject: [PATCH 09/40] Actualizar python-build.yml --- .github/workflows/python-build.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 89a6ce8..7fe66a0 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -36,12 +36,9 @@ sudo mv /usr/lib/x86_64-linux-gnu/pkgconfig/python-${{ matrix.python-version }}-embed.pc /usr/lib/x86_64-linux-gnu/pkgconfig/python3-embed.pc - name: Run module tests run: go test -race -v ./... - - name: Install cibuildwheel - run: sudo pip install cibuildwheel - name: Build the CLI run: | cd cmd/cli CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c - export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 - CIBW_BUILD_VERBOSITY=1 cibuildwheel + python -m build From 194343bbce35b684043978dc5e8b11e15c84d734 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 01:17:48 +0100 Subject: [PATCH 10/40] python-build.yml --- .github/workflows/python-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 7fe66a0..050c86d 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -41,4 +41,5 @@ cd cmd/cli CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c + python -m pip install build python -m build From cd6017d0ec50365f2feca75b126d2b36a902c371 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 12:54:19 +0100 Subject: [PATCH 11/40] Publish pypi package --- .github/workflows/python-build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 050c86d..704e049 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -43,3 +43,9 @@ touch dummy.c python -m pip install build python -m build + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: cmd/cli/dist + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} From 7eb1433163944e6993880ea235cfab59104f247b Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 13:00:21 +0100 Subject: [PATCH 12/40] Use cibuildwheel --- .github/workflows/python-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 704e049..470e9da 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -41,8 +41,8 @@ cd cmd/cli CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c - python -m pip install build - python -m build + python -m pip install cibuildwheel + CIBW_BUILD_VERBOSITY=1 python -m cibuildwheel - name: Publish package uses: pypa/gh-action-pypi-publish@release/v1 with: From 270f88b7e5f2b65126019a8864e03278a4f832fa Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 13:05:21 +0100 Subject: [PATCH 13/40] Use CIBW_BUILD var --- .github/workflows/python-build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 470e9da..e1f81e6 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -42,6 +42,8 @@ CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c python -m pip install cibuildwheel + export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 + echo $CIBW_BUILD CIBW_BUILD_VERBOSITY=1 python -m cibuildwheel - name: Publish package uses: pypa/gh-action-pypi-publish@release/v1 From 6d57387109e5e0444811e8a87c893d0eb0204fb8 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 13:15:54 +0100 Subject: [PATCH 14/40] manylinux_2_34 --- cmd/cli/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/cli/pyproject.toml b/cmd/cli/pyproject.toml index d047190..fbfb5dc 100644 --- a/cmd/cli/pyproject.toml +++ b/cmd/cli/pyproject.toml @@ -47,3 +47,4 @@ caddysnake = "caddysnake.cli:main" [tool.cibuildwheel] before-all = "uname -a" +manylinux-x86_64-image = "manylinux_2_34" From c00e9c04197abdca8a4005a3141b9db1f0806f92 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 13:19:25 +0100 Subject: [PATCH 15/40] manylinux_2_28 --- cmd/cli/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/cli/pyproject.toml b/cmd/cli/pyproject.toml index fbfb5dc..5e40cf9 100644 --- a/cmd/cli/pyproject.toml +++ b/cmd/cli/pyproject.toml @@ -47,4 +47,4 @@ caddysnake = "caddysnake.cli:main" [tool.cibuildwheel] before-all = "uname -a" -manylinux-x86_64-image = "manylinux_2_34" +manylinux-x86_64-image = "manylinux_2_28" From 550351bf0019549c4cb68f3ca9536d8c1f1c286b Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 14:33:56 +0100 Subject: [PATCH 16/40] Build using quay.io/pypa/manylinux2014_x86_64 --- .github/workflows/python-build.yml | 25 ++++++++++--------------- cmd/cli/pyproject.toml | 1 - 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index e1f81e6..3d702eb 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -11,7 +11,7 @@ contents: write jobs: build: - runs-on: ubuntu-22.04 + runs-on: quay.io/pypa/manylinux2014_x86_64 strategy: fail-fast: false matrix: @@ -19,26 +19,21 @@ env: GOEXPERIMENT: cgocheck2 steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: '1.21' - cache: false - - name: Install Xcaddy - run: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest - - name: Set up Python ${{ matrix.python-version }} + - name: Set up OS deps run: | - export DEBIAN_FRONTEND=noninteractive - sudo apt-get update -yyqq - sudo apt-get install -yyqq software-properties-common - sudo add-apt-repository -y ppa:deadsnakes/ppa - sudo apt-get install -yyqq python${{ matrix.python-version }}-dev python${{ matrix.python-version }}-venv - sudo mv /usr/lib/x86_64-linux-gnu/pkgconfig/python-${{ matrix.python-version }}-embed.pc /usr/lib/x86_64-linux-gnu/pkgconfig/python3-embed.pc + yum update + yum install go git gcc make + bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) + source /root/.gvm/scripts/gvm + gvm install 1.21.6 + gvm use 1.21.6 + - uses: actions/checkout@v4 - name: Run module tests run: go test -race -v ./... - name: Build the CLI run: | cd cmd/cli + export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c python -m pip install cibuildwheel diff --git a/cmd/cli/pyproject.toml b/cmd/cli/pyproject.toml index 5e40cf9..d047190 100644 --- a/cmd/cli/pyproject.toml +++ b/cmd/cli/pyproject.toml @@ -47,4 +47,3 @@ caddysnake = "caddysnake.cli:main" [tool.cibuildwheel] before-all = "uname -a" -manylinux-x86_64-image = "manylinux_2_28" From 5fe93474977baafe15535cc61539d9fb3d340ffe Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 14:50:40 +0100 Subject: [PATCH 17/40] Use container image --- .github/workflows/python-build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 3d702eb..900f2e8 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -11,7 +11,9 @@ contents: write jobs: build: - runs-on: quay.io/pypa/manylinux2014_x86_64 + runs-on: ubuntu-22.04 + container: + image: quay.io/pypa/manylinux2014_x86_64 strategy: fail-fast: false matrix: From 587a7a15ef9312c44a11aee9242d961d9d38ddf2 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 14:54:51 +0100 Subject: [PATCH 18/40] Yum accept installs --- .github/workflows/python-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 900f2e8..2f13985 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -23,8 +23,8 @@ steps: - name: Set up OS deps run: | - yum update - yum install go git gcc make + yum -y update + yum -y install go git gcc make bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) source /root/.gvm/scripts/gvm gvm install 1.21.6 From 7da453db15ebcd51a264491667c6872b99a18d5b Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 14:57:23 +0100 Subject: [PATCH 19/40] Fix gvm install --- .github/workflows/python-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 2f13985..56f011c 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -25,7 +25,7 @@ run: | yum -y update yum -y install go git gcc make - bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) + curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash source /root/.gvm/scripts/gvm gvm install 1.21.6 gvm use 1.21.6 From c8fb03f253bc9e4f7e74e46eb2f7666b0f6c01f7 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:01:38 +0100 Subject: [PATCH 20/40] source /github/home/.gvm/scripts/gvm --- .github/workflows/python-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 56f011c..57c8aae 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -26,7 +26,7 @@ yum -y update yum -y install go git gcc make curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash - source /root/.gvm/scripts/gvm + source /github/home/.gvm/scripts/gvm gvm install 1.21.6 gvm use 1.21.6 - uses: actions/checkout@v4 From 56e9776bc709249c1e4a321c6e8ee9a40f43cacc Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:11:28 +0100 Subject: [PATCH 21/40] source as . --- .github/workflows/python-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 57c8aae..2752a84 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -26,7 +26,7 @@ yum -y update yum -y install go git gcc make curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash - source /github/home/.gvm/scripts/gvm + . /github/home/.gvm/scripts/gvm gvm install 1.21.6 gvm use 1.21.6 - uses: actions/checkout@v4 From 7e984cc2d86821ce7b7249110201cc3f716deb1b Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:17:17 +0100 Subject: [PATCH 22/40] Fix gvm --- .github/workflows/python-build.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 2752a84..43db1be 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -22,17 +22,21 @@ GOEXPERIMENT: cgocheck2 steps: - name: Set up OS deps + shell: bash run: | yum -y update yum -y install go git gcc make curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash - . /github/home/.gvm/scripts/gvm + echo '[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"' >> $HOME/.bashrc + tail $HOME/.bashrc + source "$HOME/.gvm/scripts/gvm" gvm install 1.21.6 gvm use 1.21.6 - uses: actions/checkout@v4 - name: Run module tests run: go test -race -v ./... - name: Build the CLI + shell: bash run: | cd cmd/cli export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ From a3ca00ab4ea08614f8321aa0060fbc81800cf587 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:19:35 +0100 Subject: [PATCH 23/40] update ci --- .github/workflows/python-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 43db1be..cb76761 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -29,6 +29,7 @@ curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash echo '[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"' >> $HOME/.bashrc tail $HOME/.bashrc + ls -la $HOME/.gvm/scripts/ source "$HOME/.gvm/scripts/gvm" gvm install 1.21.6 gvm use 1.21.6 From 459badb8be193b1b65e04d7f1c69faec63ca904b Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:22:35 +0100 Subject: [PATCH 24/40] Easier installation of go --- .github/workflows/python-build.yml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index cb76761..c1c298c 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -25,14 +25,9 @@ shell: bash run: | yum -y update - yum -y install go git gcc make - curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash - echo '[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"' >> $HOME/.bashrc - tail $HOME/.bashrc - ls -la $HOME/.gvm/scripts/ - source "$HOME/.gvm/scripts/gvm" - gvm install 1.21.6 - gvm use 1.21.6 + yum -y install git gcc make wget + wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz + rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz - uses: actions/checkout@v4 - name: Run module tests run: go test -race -v ./... From c76d248790ca3a5345ae8e1c45a03de69c9ac164 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:23:00 +0100 Subject: [PATCH 25/40] export path --- .github/workflows/python-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index c1c298c..6254639 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -28,6 +28,7 @@ yum -y install git gcc make wget wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz + export PATH=$PATH:/usr/local/go/bin - uses: actions/checkout@v4 - name: Run module tests run: go test -race -v ./... From 089a11d00e16b3ea826fb853b491a4a7bda8abd1 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:23:20 +0100 Subject: [PATCH 26/40] go version --- .github/workflows/python-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 6254639..456b5c9 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -29,6 +29,7 @@ wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin + go version - uses: actions/checkout@v4 - name: Run module tests run: go test -race -v ./... From eae3da3df0196bd21127c0f9fba01667e0af0e76 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:34:40 +0100 Subject: [PATCH 27/40] Install nodejs --- .github/workflows/python-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 456b5c9..962104e 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -25,7 +25,7 @@ shell: bash run: | yum -y update - yum -y install git gcc make wget + yum -y install git gcc make wget nodejs wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin From a6e141c60541af645df56b1136e95b0a310aabf2 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:43:17 +0100 Subject: [PATCH 28/40] Manually checkout repo --- .github/workflows/python-build.yml | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 962104e..f2cbf80 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -25,17 +25,32 @@ shell: bash run: | yum -y update - yum -y install git gcc make wget nodejs + yum -y install git gcc make wget wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin go version - - uses: actions/checkout@v4 + - name: Set up Git + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + - name: Clone the repository + run: | + git clone https://github.com/${{ github.repository }} repo + cd repo + git checkout ${{ github.sha }} + - name: Verify Checkout + run: | + cd repo + git log -1 - name: Run module tests - run: go test -race -v ./... + run: | + cd repo + go test -race -v ./... - name: Build the CLI shell: bash run: | + cd repo cd cmd/cli export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ CGO_ENABLED=1 go build -o caddysnake-cli main.go @@ -47,6 +62,6 @@ - name: Publish package uses: pypa/gh-action-pypi-publish@release/v1 with: - packages-dir: cmd/cli/dist + packages-dir: repo/cmd/cli/dist user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From ad1753d26db6202fc29a635b91d0eefff12d5607 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:50:31 +0100 Subject: [PATCH 29/40] fix git clone --- .github/workflows/python-build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index f2cbf80..edce989 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -38,7 +38,6 @@ run: | git clone https://github.com/${{ github.repository }} repo cd repo - git checkout ${{ github.sha }} - name: Verify Checkout run: | cd repo From c2785a9e9c140bc8cc4d2a6078e868472f55f10f Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:54:25 +0100 Subject: [PATCH 30/40] fetch --- .github/workflows/python-build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index edce989..898402b 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -41,14 +41,18 @@ - name: Verify Checkout run: | cd repo + git fetch --depth=1 origin ${{ github.sha }} + git checkout ${{ github.sha }} git log -1 - name: Run module tests run: | cd repo + export PATH=$PATH:/usr/local/go/bin go test -race -v ./... - name: Build the CLI shell: bash run: | + export PATH=$PATH:/usr/local/go/bin cd repo cd cmd/cli export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ From 02151ce196f6e6015e00a2cc4aa011dc366be388 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 15:56:46 +0100 Subject: [PATCH 31/40] Fix go module tests --- .github/workflows/python-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 898402b..6fc66af 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -47,6 +47,7 @@ - name: Run module tests run: | cd repo + export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ export PATH=$PATH:/usr/local/go/bin go test -race -v ./... - name: Build the CLI From 2637673f8b06ffdc7f8969e89fdb4461c75213c9 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:07:41 +0100 Subject: [PATCH 32/40] fix last commit sha --- .github/workflows/python-build.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 6fc66af..41cdbc0 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -38,16 +38,28 @@ run: | git clone https://github.com/${{ github.repository }} repo cd repo + - name: Setup Environment (PR) + if: ${{ github.event_name == 'pull_request' }} + shell: bash + run: | + echo "LAST_COMMIT_SHA=${{ github.event.pull_request.head.sha }}" >> ${GITHUB_ENV} + - name: Setup Environment (Push) + if: ${{ github.event_name == 'push' }} + shell: bash + run: | + echo "LAST_COMMIT_SHA=${GITHUB_SHA}" >> ${GITHUB_ENV} - name: Verify Checkout run: | + echo $LAST_COMMIT_SHA cd repo - git fetch --depth=1 origin ${{ github.sha }} - git checkout ${{ github.sha }} + git checkout $LAST_COMMIT_SHA git log -1 - name: Run module tests run: | cd repo export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ + echo $PKG_CONFIG_PATH + pkg-config --libs python3-embed export PATH=$PATH:/usr/local/go/bin go test -race -v ./... - name: Build the CLI From acd9e85b10ced8f71665dd07c62263fb5e9d9dc7 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:13:35 +0100 Subject: [PATCH 33/40] Fix pkg config path --- .github/workflows/python-build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 41cdbc0..8c04790 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -58,7 +58,7 @@ run: | cd repo export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ - echo $PKG_CONFIG_PATH + export PKG_CONFIG_PATH=$(echo $PKG_CONFIG_PATH | awk '{gsub(" ",ORS)} 1') pkg-config --libs python3-embed export PATH=$PATH:/usr/local/go/bin go test -race -v ./... @@ -69,6 +69,7 @@ cd repo cd cmd/cli export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ + export PKG_CONFIG_PATH=$(echo $PKG_CONFIG_PATH | awk '{gsub(" ",ORS)} 1') CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c python -m pip install cibuildwheel From 1bd386012c44035cb1661d21151e82d95134b277 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:13:51 +0100 Subject: [PATCH 34/40] Fix pkg config path again --- .github/workflows/python-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 8c04790..bd50d77 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -58,7 +58,7 @@ run: | cd repo export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ - export PKG_CONFIG_PATH=$(echo $PKG_CONFIG_PATH | awk '{gsub(" ",ORS)} 1') + export PKG_CONFIG_PATH=$(echo $PKG_CONFIG_PATH | awk '{gsub(" ",ORS)} 1' | head -1) pkg-config --libs python3-embed export PATH=$PATH:/usr/local/go/bin go test -race -v ./... @@ -69,7 +69,7 @@ cd repo cd cmd/cli export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ - export PKG_CONFIG_PATH=$(echo $PKG_CONFIG_PATH | awk '{gsub(" ",ORS)} 1') + export PKG_CONFIG_PATH=$(echo $PKG_CONFIG_PATH | awk '{gsub(" ",ORS)} 1' | head -1) CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c python -m pip install cibuildwheel From 65849be8ca5de38499d19f08eec138dc70cf9d1c Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:24:49 +0100 Subject: [PATCH 35/40] Fix pkg config --- .github/workflows/python-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index bd50d77..cc2e2ae 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -57,8 +57,8 @@ - name: Run module tests run: | cd repo - export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ - export PKG_CONFIG_PATH=$(echo $PKG_CONFIG_PATH | awk '{gsub(" ",ORS)} 1' | head -1) + export PY_VERSION=cp$(echo ${{ matrix.python-version }} | tr -d .) + export PKG_CONFIG_PATH=/opt/python/cp$PY_VERSION-cp$PY_VERSION/lib/pkgconfig/ pkg-config --libs python3-embed export PATH=$PATH:/usr/local/go/bin go test -race -v ./... @@ -68,8 +68,8 @@ export PATH=$PATH:/usr/local/go/bin cd repo cd cmd/cli - export PKG_CONFIG_PATH=/opt/_internal/cpython-${{ matrix.python-version }}.*/lib/pkgconfig/ - export PKG_CONFIG_PATH=$(echo $PKG_CONFIG_PATH | awk '{gsub(" ",ORS)} 1' | head -1) + export PY_VERSION=cp$(echo ${{ matrix.python-version }} | tr -d .) + export PKG_CONFIG_PATH=/opt/python/cp$PY_VERSION-cp$PY_VERSION/lib/pkgconfig/ CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c python -m pip install cibuildwheel From eb395c1b073f55f3c96b2c709336f4fe73c28622 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:29:22 +0100 Subject: [PATCH 36/40] fix build again --- .github/workflows/python-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index cc2e2ae..1d27c6f 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -57,7 +57,7 @@ - name: Run module tests run: | cd repo - export PY_VERSION=cp$(echo ${{ matrix.python-version }} | tr -d .) + export PY_VERSION=$(echo ${{ matrix.python-version }} | tr -d .) export PKG_CONFIG_PATH=/opt/python/cp$PY_VERSION-cp$PY_VERSION/lib/pkgconfig/ pkg-config --libs python3-embed export PATH=$PATH:/usr/local/go/bin @@ -68,7 +68,7 @@ export PATH=$PATH:/usr/local/go/bin cd repo cd cmd/cli - export PY_VERSION=cp$(echo ${{ matrix.python-version }} | tr -d .) + export PY_VERSION=$(echo ${{ matrix.python-version }} | tr -d .) export PKG_CONFIG_PATH=/opt/python/cp$PY_VERSION-cp$PY_VERSION/lib/pkgconfig/ CGO_ENABLED=1 go build -o caddysnake-cli main.go touch dummy.c From 5e54d4c5ba79f0e9ae53c35dfd19941cd899a54f Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:38:39 +0100 Subject: [PATCH 37/40] ubuntu 20.04 --- .github/workflows/python-build.yml | 135 +++++++++++------------------ 1 file changed, 52 insertions(+), 83 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 1d27c6f..cc5ccc3 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -1,84 +1,53 @@ --- - name: Python Build Package - on: - pull_request: - branches: - - main - push: - branches: - - main - permissions: - contents: write - jobs: - build: - runs-on: ubuntu-22.04 - container: - image: quay.io/pypa/manylinux2014_x86_64 - strategy: - fail-fast: false - matrix: - python-version: ['3.10', '3.11', '3.12', '3.13'] - env: - GOEXPERIMENT: cgocheck2 - steps: - - name: Set up OS deps - shell: bash - run: | - yum -y update - yum -y install git gcc make wget - wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz - export PATH=$PATH:/usr/local/go/bin - go version - - name: Set up Git - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - - name: Clone the repository - run: | - git clone https://github.com/${{ github.repository }} repo - cd repo - - name: Setup Environment (PR) - if: ${{ github.event_name == 'pull_request' }} - shell: bash - run: | - echo "LAST_COMMIT_SHA=${{ github.event.pull_request.head.sha }}" >> ${GITHUB_ENV} - - name: Setup Environment (Push) - if: ${{ github.event_name == 'push' }} - shell: bash - run: | - echo "LAST_COMMIT_SHA=${GITHUB_SHA}" >> ${GITHUB_ENV} - - name: Verify Checkout - run: | - echo $LAST_COMMIT_SHA - cd repo - git checkout $LAST_COMMIT_SHA - git log -1 - - name: Run module tests - run: | - cd repo - export PY_VERSION=$(echo ${{ matrix.python-version }} | tr -d .) - export PKG_CONFIG_PATH=/opt/python/cp$PY_VERSION-cp$PY_VERSION/lib/pkgconfig/ - pkg-config --libs python3-embed - export PATH=$PATH:/usr/local/go/bin - go test -race -v ./... - - name: Build the CLI - shell: bash - run: | - export PATH=$PATH:/usr/local/go/bin - cd repo - cd cmd/cli - export PY_VERSION=$(echo ${{ matrix.python-version }} | tr -d .) - export PKG_CONFIG_PATH=/opt/python/cp$PY_VERSION-cp$PY_VERSION/lib/pkgconfig/ - CGO_ENABLED=1 go build -o caddysnake-cli main.go - touch dummy.c - python -m pip install cibuildwheel - export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 - echo $CIBW_BUILD - CIBW_BUILD_VERBOSITY=1 python -m cibuildwheel - - name: Publish package - uses: pypa/gh-action-pypi-publish@release/v1 - with: - packages-dir: repo/cmd/cli/dist - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} + name: Python Build Package + on: + pull_request: + branches: + - main + push: + branches: + - main + permissions: + contents: write + jobs: + build: + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13'] + env: + GOEXPERIMENT: cgocheck2 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: '1.21' + cache: false + - name: Install Xcaddy + run: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest + - name: Set up Python ${{ matrix.python-version }} + run: | + export DEBIAN_FRONTEND=noninteractive + sudo apt-get update -yyqq + sudo apt-get install -yyqq software-properties-common + sudo add-apt-repository -y ppa:deadsnakes/ppa + sudo apt-get install -yyqq python${{ matrix.python-version }}-dev python${{ matrix.python-version }}-venv + sudo mv /usr/lib/x86_64-linux-gnu/pkgconfig/python-${{ matrix.python-version }}-embed.pc /usr/lib/x86_64-linux-gnu/pkgconfig/python3-embed.pc + - name: Run module tests + run: go test -race -v ./... + - name: Build the CLI + run: | + cd cmd/cli + CGO_ENABLED=1 go build -o caddysnake-cli main.go + touch dummy.c + python -m pip install cibuildwheel + export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 + echo $CIBW_BUILD + CIBW_BUILD_VERBOSITY=1 python -m cibuildwheel + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: cmd/cli/dist + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file From 7b778312e5db3ea4557066f30652447a34f19c44 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:43:44 +0100 Subject: [PATCH 38/40] Upload from wheelhouse --- .github/workflows/python-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index cc5ccc3..5559a41 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -48,6 +48,6 @@ - name: Publish package uses: pypa/gh-action-pypi-publish@release/v1 with: - packages-dir: cmd/cli/dist + packages-dir: cmd/cli/wheelhouse user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file From 9127d5a7e764654c4c578affc8b51335b52c5478 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:58:16 +0100 Subject: [PATCH 39/40] Update python build ci --- .github/workflows/python-build.yml | 103 ++++++++++++++--------------- 1 file changed, 50 insertions(+), 53 deletions(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 5559a41..d490054 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -1,53 +1,50 @@ ---- - name: Python Build Package - on: - pull_request: - branches: - - main - push: - branches: - - main - permissions: - contents: write - jobs: - build: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - python-version: ['3.10', '3.11', '3.12', '3.13'] - env: - GOEXPERIMENT: cgocheck2 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: '1.21' - cache: false - - name: Install Xcaddy - run: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest - - name: Set up Python ${{ matrix.python-version }} - run: | - export DEBIAN_FRONTEND=noninteractive - sudo apt-get update -yyqq - sudo apt-get install -yyqq software-properties-common - sudo add-apt-repository -y ppa:deadsnakes/ppa - sudo apt-get install -yyqq python${{ matrix.python-version }}-dev python${{ matrix.python-version }}-venv - sudo mv /usr/lib/x86_64-linux-gnu/pkgconfig/python-${{ matrix.python-version }}-embed.pc /usr/lib/x86_64-linux-gnu/pkgconfig/python3-embed.pc - - name: Run module tests - run: go test -race -v ./... - - name: Build the CLI - run: | - cd cmd/cli - CGO_ENABLED=1 go build -o caddysnake-cli main.go - touch dummy.c - python -m pip install cibuildwheel - export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 - echo $CIBW_BUILD - CIBW_BUILD_VERBOSITY=1 python -m cibuildwheel - - name: Publish package - uses: pypa/gh-action-pypi-publish@release/v1 - with: - packages-dir: cmd/cli/wheelhouse - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file +name: Python Build Package +on: + push: + tags: [ 'v*.*.*' ] + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13'] + env: + GOEXPERIMENT: cgocheck2 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: '1.21' + cache: false + - name: Install Xcaddy + run: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest + - name: Set up Python ${{ matrix.python-version }} + run: | + export DEBIAN_FRONTEND=noninteractive + sudo apt-get update -yyqq + sudo apt-get install -yyqq software-properties-common + sudo add-apt-repository -y ppa:deadsnakes/ppa + sudo apt-get install -yyqq python${{ matrix.python-version }}-dev python${{ matrix.python-version }}-venv + sudo mv /usr/lib/x86_64-linux-gnu/pkgconfig/python-${{ matrix.python-version }}-embed.pc /usr/lib/x86_64-linux-gnu/pkgconfig/python3-embed.pc + - name: Run module tests + run: go test -race -v ./... + - name: Build the CLI + run: | + cd cmd/cli + CGO_ENABLED=1 go build -o caddysnake-cli main.go + touch dummy.c + python -m pip install cibuildwheel + export CIBW_BUILD=cp$(echo ${{ matrix.python-version }} | tr -d .)-manylinux_x86_64 + echo $CIBW_BUILD + CIBW_BUILD_VERBOSITY=1 python -m cibuildwheel + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: cmd/cli/wheelhouse + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file From a859686fb84e242f0501e238cf060f61e8b2ad17 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Tue, 24 Dec 2024 16:58:55 +0100 Subject: [PATCH 40/40] add newline --- .github/workflows/python-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index d490054..b038e7f 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -47,4 +47,4 @@ jobs: with: packages-dir: cmd/cli/wheelhouse user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file + password: ${{ secrets.PYPI_API_TOKEN }}