Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
ee68d72fcd | |||
c5e580c627 | |||
3734143548 | |||
7858f1c55b | |||
07a49d6cd4 | |||
c8e8b45099 | |||
5614bd6ada | |||
8c7ffdf5a7 | |||
78f53564b1 |
59
.gitea/workflows/build copy.yaml
Normal file
59
.gitea/workflows/build copy.yaml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
name: Release Build
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- v*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: golang:1.21
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
run: |
|
||||||
|
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||||
|
cd hello_gitea
|
||||||
|
git checkout ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Setup Go
|
||||||
|
run: |
|
||||||
|
# Install jq for JSON parsing
|
||||||
|
apt-get update && apt-get install -y jq
|
||||||
|
git --version
|
||||||
|
go version
|
||||||
|
jq --version
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cd hello_gitea
|
||||||
|
mkdir -p bin
|
||||||
|
go build -o bin/hello-api-${{ github.ref_name }} main.go
|
||||||
|
ls -la bin/
|
||||||
|
|
||||||
|
- name: Create Release
|
||||||
|
run: |
|
||||||
|
cd hello_gitea
|
||||||
|
# Create release using Gitea API
|
||||||
|
curl -X POST \
|
||||||
|
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"tag_name": "${{ github.ref_name }}",
|
||||||
|
"name": "Release ${{ github.ref_name }}",
|
||||||
|
"body": "Automated release",
|
||||||
|
"draft": false,
|
||||||
|
"prerelease": false
|
||||||
|
}' \
|
||||||
|
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases"
|
||||||
|
|
||||||
|
# Upload asset
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||||
|
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/tags/${{ github.ref_name }}" | \
|
||||||
|
jq -r '.id')
|
||||||
|
|
||||||
|
curl -X POST \
|
||||||
|
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
--data-binary @bin/hello-api-${{ github.ref_name }} \
|
||||||
|
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/$RELEASE_ID/assets?name=hello-api-${{ github.ref_name }}"
|
@@ -5,34 +5,160 @@ on:
|
|||||||
- v*
|
- v*
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
build-binaries:
|
||||||
runs-on: [ubuntu-latest]
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: golang:1.21
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: linux
|
||||||
|
arch: amd64
|
||||||
|
suffix: linux-amd64
|
||||||
|
- os: linux
|
||||||
|
arch: arm64
|
||||||
|
suffix: linux-arm64
|
||||||
|
- os: windows
|
||||||
|
arch: amd64
|
||||||
|
suffix: windows-amd64.exe
|
||||||
|
- os: darwin
|
||||||
|
arch: amd64
|
||||||
|
suffix: darwin-amd64
|
||||||
|
- os: darwin
|
||||||
|
arch: arm64
|
||||||
|
suffix: darwin-arm64
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Checkout repository
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
run: |
|
||||||
|
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||||
|
cd hello_gitea
|
||||||
|
git checkout ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Setup Go
|
||||||
|
run: |
|
||||||
|
# Install jq for JSON parsing
|
||||||
|
apt-get update && apt-get install -y jq
|
||||||
|
git --version
|
||||||
|
go version
|
||||||
|
jq --version
|
||||||
|
|
||||||
|
- name: Build for ${{ matrix.os }}-${{ matrix.arch }}
|
||||||
|
run: |
|
||||||
|
cd hello_gitea
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
go build -o bin/hello-api-${{ github.ref_name }} main.go
|
GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} go build -o bin/hello-api-${{ matrix.suffix }} main.go
|
||||||
|
ls -la bin/
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
run: |
|
||||||
|
cd hello_gitea/bin
|
||||||
|
tar -czf hello-api-${{ matrix.suffix }}.tar.gz hello-api-${{ matrix.suffix }}
|
||||||
|
echo "Built: hello-api-${{ matrix.suffix }}.tar.gz"
|
||||||
|
|
||||||
|
create-docker-image:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: golang:1.21
|
||||||
|
needs: build-binaries
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
run: |
|
||||||
|
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||||
|
cd hello_gitea
|
||||||
|
git checkout ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Setup Docker
|
||||||
|
run: |
|
||||||
|
# Install Docker CLI
|
||||||
|
apt-get update && apt-get install -y docker.io
|
||||||
|
docker --version
|
||||||
|
|
||||||
|
- name: Build Docker image
|
||||||
|
run: |
|
||||||
|
cd hello_gitea
|
||||||
|
# Build image using existing Dockerfile
|
||||||
|
docker build -t hello-api:${{ github.ref_name }} .
|
||||||
|
docker tag hello-api:${{ github.ref_name }} hello-api:latest
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
run: |
|
||||||
|
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
|
||||||
|
|
||||||
|
- name: Push to Docker Hub
|
||||||
|
run: |
|
||||||
|
cd hello_gitea
|
||||||
|
docker push ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:${{ github.ref_name }}
|
||||||
|
docker push ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:latest
|
||||||
|
|
||||||
|
create-release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: golang:1.21
|
||||||
|
needs: [build-binaries, create-docker-image]
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
run: |
|
||||||
|
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||||
|
cd hello_gitea
|
||||||
|
git checkout ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Setup Go
|
||||||
|
run: |
|
||||||
|
# Install jq for JSON parsing
|
||||||
|
apt-get update && apt-get install -y jq
|
||||||
|
git --version
|
||||||
|
go version
|
||||||
|
jq --version
|
||||||
|
|
||||||
|
- name: Build all binaries
|
||||||
|
run: |
|
||||||
|
cd hello_gitea
|
||||||
|
mkdir -p bin
|
||||||
|
|
||||||
|
# Build for all platforms
|
||||||
|
GOOS=linux GOARCH=amd64 go build -o bin/hello-api-linux-amd64 main.go
|
||||||
|
GOOS=linux GOARCH=arm64 go build -o bin/hello-api-linux-arm64 main.go
|
||||||
|
GOOS=windows GOARCH=amd64 go build -o bin/hello-api-windows-amd64.exe main.go
|
||||||
|
GOOS=darwin GOARCH=amd64 go build -o bin/hello-api-darwin-amd64 main.go
|
||||||
|
GOOS=darwin GOARCH=arm64 go build -o bin/hello-api-darwin-arm64 main.go
|
||||||
|
|
||||||
|
# Create archives
|
||||||
|
cd bin
|
||||||
|
tar -czf hello-api-linux-amd64.tar.gz hello-api-linux-amd64
|
||||||
|
tar -czf hello-api-linux-arm64.tar.gz hello-api-linux-arm64
|
||||||
|
tar -czf hello-api-windows-amd64.tar.gz hello-api-windows-amd64.exe
|
||||||
|
tar -czf hello-api-darwin-amd64.tar.gz hello-api-darwin-amd64
|
||||||
|
tar -czf hello-api-darwin-arm64.tar.gz hello-api-darwin-arm64
|
||||||
|
|
||||||
|
ls -la
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: actions/create-release@v1
|
run: |
|
||||||
env:
|
cd hello_gitea
|
||||||
GITHUB_TOKEN: ${{ secrets.GITEATOKEN }}
|
# Create release using Gitea API
|
||||||
GITEA_TOKEN: ${{ secrets.GITEATOKEN }}
|
curl -X POST \
|
||||||
with:
|
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||||
tag_name: ${{ github.ref }}
|
-H "Content-Type: application/json" \
|
||||||
release_name: "Release ${{ github.ref }}"
|
-d '{
|
||||||
body: "Automated release"
|
"tag_name": "${{ github.ref_name }}",
|
||||||
draft: false
|
"name": "Release ${{ github.ref_name }}",
|
||||||
prerelease: false
|
"body": "Automated release with multi-platform binaries and Docker image",
|
||||||
|
"draft": false,
|
||||||
- name: Upload Asset
|
"prerelease": false
|
||||||
uses: actions/upload-release-asset@v1
|
}' \
|
||||||
env:
|
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases"
|
||||||
GITHUB_TOKEN: ${{ secrets.GITEATOKEN }}
|
|
||||||
GITEA_TOKEN: ${{ secrets.GITEATOKEN }}
|
# Upload assets
|
||||||
with:
|
RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/tags/${{ github.ref_name }}" | \
|
||||||
asset_path: ./bin/hello-api-${{ github.ref_name }}
|
jq -r '.id')
|
||||||
asset_name: hello-api-${{ github.ref_name }}
|
|
||||||
|
# Upload all binaries
|
||||||
|
for file in bin/*.tar.gz; do
|
||||||
|
echo "Uploading $file..."
|
||||||
|
curl -X POST \
|
||||||
|
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
--data-binary @$file \
|
||||||
|
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/$RELEASE_ID/assets?name=$(basename $file)"
|
||||||
|
done
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -25,3 +25,4 @@ go.work.sum
|
|||||||
# env file
|
# env file
|
||||||
.env
|
.env
|
||||||
bin/
|
bin/
|
||||||
|
dockerhub_token
|
46
Dockerfile
Normal file
46
Dockerfile
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Build stage
|
||||||
|
FROM golang:1.21-alpine AS builder
|
||||||
|
|
||||||
|
# Install git and ca-certificates
|
||||||
|
RUN apk --no-cache add git ca-certificates
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy go mod files
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
|
||||||
|
# Download dependencies
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
|
# Copy source code
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Build the application
|
||||||
|
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o hello-api main.go
|
||||||
|
|
||||||
|
# Final stage
|
||||||
|
FROM alpine:latest
|
||||||
|
|
||||||
|
# Install jq and ca-certificates
|
||||||
|
RUN apk --no-cache add ca-certificates jq
|
||||||
|
|
||||||
|
# Create non-root user
|
||||||
|
RUN addgroup -g 1001 -S appgroup && \
|
||||||
|
adduser -u 1001 -S appuser -G appgroup
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy binary from builder stage
|
||||||
|
COPY --from=builder /app/hello-api .
|
||||||
|
|
||||||
|
# Change ownership to non-root user
|
||||||
|
RUN chown appuser:appgroup hello-api
|
||||||
|
|
||||||
|
# Switch to non-root user
|
||||||
|
USER appuser
|
||||||
|
|
||||||
|
# Expose port (if your app uses one)
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
# Run the application
|
||||||
|
CMD ["./hello-api"]
|
Reference in New Issue
Block a user