vrongmeal / caddygit

Git module for Caddy v2
73 stars 6 forks source link

Caddyfile #3

Open danigbaameiro opened 4 years ago

danigbaameiro commented 4 years ago

Hi!

I think may be interesting make a Caddyfile example (of this module) for caddy v2. Thanks for doing this module 😄

francislavoie commented 4 years ago

Caddyfile support isn't implemented yet, see the TODO in the README https://github.com/vrongmeal/caddygit#todo

lflare commented 3 years ago

Hello,

I would seek to reopen this issue, as it's not yet resolved. It's been more than a year since the last update of this issue and I sincerely believe Caddyfile support is something that some people are still waiting for.

vrongmeal commented 3 years ago

Hello,

I would seek to reopen this issue, as it's not yet resolved. It's been more than a year since the last update of this issue and I sincerely believe Caddyfile support is something that some people are still waiting for.

Reopening the issue. I would love to see if anyone's willing to work on this.

rigon commented 3 years ago

I have been working in the project to bring inn the support for the Caddyfile. You can find it here: https://github.com/rigon/caddygit

However I'm facing some issues and I would like your help. I wrote this configuration:

{
    debug
    http_port 2000
    order git before file_server
}
:2000 {
    git https://github.com/caddyserver/website.git /git
    file_server {
        root /git
        browse
    }
}

But after running Caddy and opening the website http://localhost:2000/, I get the following error in the output:

{id=5r5gp8uhk} webhook.(*Service).ServeHTTP (service.go:159): HTTP 400: only POST method accepted; got GET
2021/11/21 16:50:56.260 ←[35mDEBUG←[0m  http.stdlib     http: superfluous response.WriteHeader call from github.com/caddyserver/caddy/v2/modules/caddyhttp.(*Server).ServeHTTP (server.go:266)

I was looking how to mimic the behavior from Caddy v1 where you just need to specify the git directive to bring your website online, but I'm not seeing how to get there.

francislavoie commented 3 years ago

@rigon that error is due to a bug, this line https://github.com/rigon/caddygit/blob/fbb915b726b534010a2eb7b563ec8b3ebeacdfd0/services/webhook/service.go#L158 is writing the status code, but it shouldn't - the Caddy server itself will write the caddy.Error as the status code itself later. You can remove that line and the problem should go away.

But your repo is only half of the Caddyfile support this repo needs. You only have support for configuring the webhook (which is how the Caddy app would accept notifications about changes to a repo). Support for configuring the "app" will be needed, and that can be done via global options (with RegisterGlobalOption(), you can look at https://github.com/abiosoft/caddy-exec as an example). The app is what actually checks out and maintains a repo on disk.

rigon commented 3 years ago

Yes, it is still half way implemented. Once I have basics working well I will think about supporting the full options.

rigon commented 2 years ago

@francislavoie Can you help me finish this bit? I don't know how to inject the Handler Directive configuration into the App's configuration. The goal is adding a client when the git directive is found in a site block. Or maybe I'm not seeing the problem clearly. The line in question is module/gitcaddyfile.go#L62

francislavoie commented 2 years ago

You need to construct a Handler struct (from handler.go), and return that. The Handler implements caddyhttp.MiddlewareHandler, i.e. has the ServeHTTP() function.

The idea of the Caddyfile adapter is that you fill out the structs, then Caddy will JSON serialize it (see the json field tags on the structs) and then use that JSON to actually run.

Also, that TODO comment doesn't really make sense, the handler isn't "sent" to the app, the handler module is its own thing. Handlers are configured within the http app, in routes. For example, write a Caddyfile like this, then run caddy adapt --pretty, you'll see the JSON output.

:80 {
    root * /srv
    file_server
}