chore: upgrade Woodpecker to v1.0.0

- Update the Woodpecker Dockerfile.
- Add .dockerignore to limit the context.
- Add code to download the Woodpecker binary.
- Refactor the prepare target.
This commit is contained in:
Dan Anglin 2023-07-31 00:40:19 +01:00
parent 428a59faaa
commit baf5f13c51
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
4 changed files with 93 additions and 19 deletions

View file

@ -29,6 +29,10 @@ func Download(name string) error {
if err := downloadGoToSocial(cfg.GoToSocial.Version); err != nil { if err := downloadGoToSocial(cfg.GoToSocial.Version); err != nil {
return fmt.Errorf("an error occurred whilst getting the packages for GoToSocial; %w", err) return fmt.Errorf("an error occurred whilst getting the packages for GoToSocial; %w", err)
} }
case "woodpecker":
if err := downloadWoodpecker(cfg.Woodpecker.Version); err != nil {
return fmt.Errorf("an error occurred whilst getting the packages for Woodpecker; %w", err)
}
default: default:
fmt.Printf("'%s' has no files to download.\n", name) fmt.Printf("'%s' has no files to download.\n", name)
} }
@ -36,6 +40,55 @@ func Download(name string) error {
return nil return nil
} }
// downloadWoodpecker downloads and validates the files for the Woodpecker deployment.
func downloadWoodpecker(version string) error {
destinationDir := filepath.Join(rootBuildDir, "woodpecker")
binaryTarUrl := fmt.Sprintf(
"https://github.com/woodpecker-ci/woodpecker/releases/download/v%s/woodpecker-server_linux_amd64.tar.gz",
version,
)
binaryTarFilepath := filepath.Join(
destinationDir,
fmt.Sprintf("woodpecker-server-%s_linux_amd64.tar.gz", version),
)
checksumUrl := fmt.Sprintf(
"https://github.com/woodpecker-ci/woodpecker/releases/download/v%s/checksums.txt",
version,
)
checksumFilePath := filepath.Join(
destinationDir,
fmt.Sprintf("woodpecker_%s_checksums.txt", version),
)
pack := downloadPack{
destinationDir: destinationDir,
packages: []pack{
{
file: object{
source: binaryTarUrl,
destination: binaryTarFilepath,
},
},
},
validateGPGSignature: false,
checksum: object{
source: checksumUrl,
destination: checksumFilePath,
},
validateChecksum: false,
}
if err := download(pack); err != nil {
return err
}
return nil
}
// downloadForgejo downloads and validates the Forgejo files. // downloadForgejo downloads and validates the Forgejo files.
func downloadForgejo(version string) error { func downloadForgejo(version string) error {
var ( var (

View file

@ -35,10 +35,23 @@ func Prepare(service string) error {
service := o.Name() service := o.Name()
buildDir := filepath.Join(rootBuildDir, service)
if _, err := os.Stat(buildDir); err != nil {
if err := os.Mkdir(buildDir, 0o700); err != nil {
return fmt.Errorf("unable to make %s; %w", buildDir, err)
}
}
if service != "compose" { if service != "compose" {
mg.Deps( mg.Deps(
mg.F(Download, service), mg.F(Download, service),
) )
log.Printf("Copying assets for %s.\n", service)
if err := copyAssets(service); err != nil {
return fmt.Errorf("unable to copy the assets for %s; %w", service, err)
}
} }
log.Printf("Rendering templates for %s.\n", service) log.Printf("Rendering templates for %s.\n", service)
@ -46,26 +59,32 @@ func Prepare(service string) error {
return fmt.Errorf("unable to render templates for %s; %w", service, err) return fmt.Errorf("unable to render templates for %s; %w", service, err)
} }
log.Printf("Copying assets for %s.\n", service)
if err := copyAssets(service); err != nil {
return fmt.Errorf("unable to copy the assets for %s; %w", service, err)
}
} }
} else { } else {
buildDir := filepath.Join(rootBuildDir, service)
if _, err := os.Stat(buildDir); err != nil {
if err := os.Mkdir(buildDir, 0o700); err != nil {
return fmt.Errorf("unable to make %s; %w", buildDir, err)
}
}
if service != "compose" { if service != "compose" {
mg.Deps( mg.Deps(
mg.F(Download, service), mg.F(Download, service),
mg.F(Prepare, "compose"), mg.F(Prepare, "compose"),
) )
log.Printf("Copying assets for %s.\n", service)
if err := copyAssets(service); err != nil {
return fmt.Errorf("unable to copy the assets for %s; %w", service, err)
}
} }
if err := render(cfg, service); err != nil { if err := render(cfg, service); err != nil {
return fmt.Errorf("an error occurred whilst rendering the templates; %w", err) return fmt.Errorf("an error occurred whilst rendering the templates; %w", err)
} }
if err := copyAssets(service); err != nil {
return fmt.Errorf("unable to copy the assets for %s; %w", service, err)
}
} }
return nil return nil
@ -73,9 +92,6 @@ func Prepare(service string) error {
func render(cfg config, component string) error { func render(cfg config, component string) error {
buildDirName := filepath.Join(rootBuildDir, component) buildDirName := filepath.Join(rootBuildDir, component)
if err := os.MkdirAll(buildDirName, 0o750); err != nil {
return fmt.Errorf("unable to make %s; %w", buildDirName, err)
}
templateDirName := filepath.Join(rootTemplatesDir, component) templateDirName := filepath.Join(rootTemplatesDir, component)

View file

@ -0,0 +1,4 @@
*
!entrypoint.sh
!traefik_woodpecker.yaml
!woodpecker-server-{{ .Woodpecker.Version }}_linux_amd64.tar.gz

View file

@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM alpine:3.17 FROM alpine:3.18
WORKDIR /tmp WORKDIR /tmp
@ -9,20 +9,21 @@ RUN --mount=type=bind,source=.,target=/packages \
ca-certificates \ ca-certificates \
&& addgroup -g {{ .FlowGID }} flow \ && addgroup -g {{ .FlowGID }} flow \
&& adduser -S -H -D -s /bin/bash -u {{ .Woodpecker.LinuxUID }} -G flow workflow \ && adduser -S -H -D -s /bin/bash -u {{ .Woodpecker.LinuxUID }} -G flow workflow \
&& mkdir -p {{ .Woodpecker.DataContainerDirectory }} \ && mkdir -p {{ .Woodpecker.DataContainerDirectory }} /flow/woodpecker/tmp \
&& chown {{ .Woodpecker.LinuxUID }}:{{ .Woodpecker.LinuxUID }} {{ .Woodpecker.DataContainerDirectory }} \ && chown {{ .Woodpecker.LinuxUID }}:{{ .Woodpecker.LinuxUID }} {{ .Woodpecker.DataContainerDirectory }} /flow/woodpecker/tmp \
&& chmod 0700 {{ .Woodpecker.DataContainerDirectory }} \ && chmod 0700 {{ .Woodpecker.DataContainerDirectory }} /flow/woodpecker/tmp \
&& tar xzvf /packages/woodpecker-server-{{ .Woodpecker.Version }}_linux_amd64.tar.gz \ && tar xzvf /packages/woodpecker-server-{{ .Woodpecker.Version }}_linux_amd64.tar.gz \
&& mv /tmp/woodpecker-server /usr/local/bin/woodpecker-server \ && mv /tmp/woodpecker-server /usr/local/bin/woodpecker-server \
&& cp /packages/entrypoint.sh /usr/local/bin/entrypoint \
&& chmod a+x /usr/local/bin/entrypoint \
&& cp /packages/traefik_woodpecker.yaml /flow/woodpecker/tmp/traefik_woodpecker.yaml \
&& chown {{ .Woodpecker.LinuxUID }}:{{ .FlowGID }} /flow/woodpecker/tmp/traefik_woodpecker.yaml \
&& rm -rf /tmp/* && rm -rf /tmp/*
COPY --chown={{ .Woodpecker.LinuxUID }}:{{ .Woodpecker.LinuxUID }} entrypoint.sh /usr/local/bin/entrypoint
COPY --chown={{ .Woodpecker.LinuxUID }}:{{ .FlowGID }} traefik_woodpecker.yaml /flow/woodpecker/tmp/traefik_woodpecker.yaml
RUN chmod a+x /usr/local/bin/entrypoint
ENV GODEBUG=netdns=go ENV GODEBUG=netdns=go
USER {{ .Woodpecker.LinuxUID }}:{{ .FlowGID }} USER {{ .Woodpecker.LinuxUID }}:{{ .FlowGID }}
WORKDIR /
ENTRYPOINT ["entrypoint"] ENTRYPOINT ["entrypoint"]