Adds some examples to build golang projects (#3)

I added some examples to

- use the CI to build golang projects
- build and publish a 'latest' tagged docker container to DockerHub
- build and publish a version tagged docker container from a version tag to DockerHub

Co-authored-by: JohnWalkerx <johnwalkerx@mailbox.org>
Reviewed-on: https://codeberg.org/Codeberg-CI/examples/pulls/3
Co-authored-by: JohnWalkerx <johnwalkerx@noreply.codeberg.org>
Co-committed-by: JohnWalkerx <johnwalkerx@noreply.codeberg.org>
This commit is contained in:
JohnWalkerx 2022-06-26 21:30:46 +02:00 committed by 6543
parent 9695398116
commit 28d812b95f
4 changed files with 91 additions and 0 deletions

View File

@ -8,6 +8,8 @@ Pull requests are accepted/welcome.
| Link | Language | Build System | Comments |
| :-- | :-- | :-- | :-- |
| [C/make.yml](C/make.yml) | C | Make | Simple ci for building a Make based C project |
| [golang/build.yml](golang/build.yml) | golang | golang | Simple ci for building and test a Go project |
| [golang/build-docker.yml](golang/build-docker.yml) | golang | golang / kaniko | CI to build golang project and build various docker container and publish them on DockerHub |
# More:
https://codeberg.org/explore/repos?q=woodpecker-ci&topic=1

17
golang/Dockerfile Normal file
View File

@ -0,0 +1,17 @@
# Replace 'APPLICATIONNAME' with the name of your golang project
FROM golang:1.17 AS certs
FROM scratch
# copy certs from golang:1.17 image
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
# Copy prebuild Go binary into container
COPY ./APPLICATIONNAME /APPLICATIONNAME
# Uncomment and ajust if golang application exposes an port
#EXPOSE 3000
# Run application
CMD ["/APPLICATIONNAME"]

64
golang/build-docker.yml Normal file
View File

@ -0,0 +1,64 @@
pipeline:
# Builds your Go application
build:
# Set your preferred Go version:
image: golang:1.17
environment:
# Needed if you want to cross-compile and package the binary in a container.
- CGO_ENABLED=0
# Select your target OS:
- GOOS=linux
# Select your target architecture:
- GOARCH=amd64
commands:
- go get
- go build
# Runs a dryrun to build the docker container
dryrun-docker:
image: plugins/kaniko
settings:
repo: DOCKERUSERNAME/DOCKERHUBREPO
tags: test
dockerfile: Dockerfile
# Just builds the container without a push to DockerHub.
no_push: true
when:
event: pull_request
# Builds and publish a docker container to DockerHub from the main-branch
publish-docker-latest:
image: plugins/kaniko
settings:
repo: DOCKERUSERNAME/DOCKERHUBREPO
tags: latest
dockerfile: Dockerfile
username:
# Secret 'docker_username' needs to be set in the CI settings
from_secret: docker_username
password:
# Secret 'docker_password' needs to be set in the CI settings
from_secret: docker_password
when:
# Push new version of tag latest if new push on main-branch
event: push
branch: main
# Builds and publishes a docker container of a tag
publish-docker-tag:
image: plugins/kaniko
settings:
repo: DOCKERUSERNAME/DOCKERHUBREPO
# Uses the tag from git for the container tag
tags: ${CI_COMMIT_TAG}
dockerfile: Dockerfile
username:
# Secret 'docker_username' needs to be set in the CI settings
from_secret: docker_username
password:
# Secret 'docker_password' needs to be set in the CI settings
from_secret: docker_password
when:
# Push new version when version tag is created
event: tag
tag: v*

8
golang/build.yml Normal file
View File

@ -0,0 +1,8 @@
pipeline:
build:
image: golang:1.17
commands:
- go get
- go build
# Optional: Run go tests
- go test