Sample build project adapted from wordpress
All checks were successful
Build & Release Go Project / build (push) Successful in 40s
All checks were successful
Build & Release Go Project / build (push) Successful in 40s
This commit is contained in:
parent
de293b5f37
commit
b1c886c1cf
1 changed files with 90 additions and 0 deletions
90
.forgejo/workflows/build-project.yml
Normal file
90
.forgejo/workflows/build-project.yml
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
# This workflow will build a standard Go project structure into
|
||||||
|
# a binary and release it via the Forgejo Releases tab.
|
||||||
|
#
|
||||||
|
# The anticipated project structure references something like below,
|
||||||
|
# however I would expect you to change "go-project" to "src".
|
||||||
|
#
|
||||||
|
# .
|
||||||
|
# ├── cmd
|
||||||
|
# │ └── sample
|
||||||
|
# │ └── main.go
|
||||||
|
# ├── internal
|
||||||
|
# │ └── greet
|
||||||
|
# │ └── greet.go
|
||||||
|
# ├── pkg
|
||||||
|
# │ └── util
|
||||||
|
# │ └── util.go
|
||||||
|
# ├── go.mod
|
||||||
|
# └── README.md
|
||||||
|
#
|
||||||
|
# We expect go.mod to exist and be correct.
|
||||||
|
|
||||||
|
name: Build & Release Go Project
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: docker
|
||||||
|
container: debian:12
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Prepare Build Environment
|
||||||
|
run: |
|
||||||
|
apt update && apt -y install zip nodejs curl jq golang
|
||||||
|
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build All Binaries
|
||||||
|
run: |
|
||||||
|
# Create the build directory for a consistent place to store binaries
|
||||||
|
mkdir -p build
|
||||||
|
|
||||||
|
# Iterate over the cmd directory to compile all binaries found there
|
||||||
|
ls ${SOURCE_DIR}/cmd | while read BINARY ; do
|
||||||
|
go build -v -o build/${BINARY} ./cmd/${BINARY}
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Create a release if it doesn't exist
|
||||||
|
run: |
|
||||||
|
# Curl request that uses the repos token & Forgejo's built-in variables
|
||||||
|
# to create a new release based on the tag that you have pushed
|
||||||
|
#
|
||||||
|
# It doesn't care if the release exists or not.
|
||||||
|
curl -X POST "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases" \
|
||||||
|
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"tag_name": "'"${GITHUB_REF##*/}"'",
|
||||||
|
"target_commitish": "main",
|
||||||
|
"name": "'"${GITHUB_REF##*/}"'",
|
||||||
|
"body": "Auto release",
|
||||||
|
"draft": false,
|
||||||
|
"prerelease": false
|
||||||
|
}' || true
|
||||||
|
|
||||||
|
- name: Upload Binaries To Release Tab
|
||||||
|
run: |
|
||||||
|
# Set some variables because it's cleaner than in-line
|
||||||
|
TAG_NAME="${GITHUB_REF##*/}"
|
||||||
|
REPO_NAME="$(basename $GITHUB_REPOSITORY)"
|
||||||
|
|
||||||
|
# Get the release ID created in the last step
|
||||||
|
RELEASE_ID=$(curl -s \
|
||||||
|
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
||||||
|
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG_NAME}" \
|
||||||
|
| jq -r '.id')
|
||||||
|
|
||||||
|
# We're going to want to push each binary, so we'll iterate over them and
|
||||||
|
# push them one-by-one.
|
||||||
|
ls build | while read BINARY ; do
|
||||||
|
curl -X POST "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${BINARY}" \
|
||||||
|
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
||||||
|
-H "Content-Type: application/zip" \
|
||||||
|
--data-binary "@build/${BINARY}"
|
||||||
|
done
|
Loading…
Add table
Add a link
Reference in a new issue