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:
parent
428a59faaa
commit
baf5f13c51
4 changed files with 93 additions and 19 deletions
|
@ -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 (
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
4
templates/woodpecker/.dockerignore.gotmpl
Normal file
4
templates/woodpecker/.dockerignore.gotmpl
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
*
|
||||||
|
!entrypoint.sh
|
||||||
|
!traefik_woodpecker.yaml
|
||||||
|
!woodpecker-server-{{ .Woodpecker.Version }}_linux_amd64.tar.gz
|
|
@ -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"]
|
||||||
|
|
Loading…
Reference in a new issue