Compare commits
24 Commits
a23464cfde
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| b2747f1959 | |||
|
|
246e9c2667 | ||
|
|
bf2c93a084 | ||
|
|
e6d69f59e8 | ||
|
|
038c42dff7 | ||
|
|
61f65d6df0 | ||
|
|
f5fd35d12e | ||
|
|
e8bb42c1b6 | ||
| 0d10f383ec | |||
|
|
cad40e3c44 | ||
|
|
11844e9945 | ||
|
|
06355772ed | ||
|
|
3837466a7a | ||
|
|
a9179191b9 | ||
|
|
1c2261ec99 | ||
|
|
6873df57c7 | ||
|
|
9a9323e0aa | ||
|
|
36093517fb | ||
|
|
d2059c39f5 | ||
|
|
03bcf313ca | ||
|
|
8e82f3b6a2 | ||
|
|
6da9ef7b9b | ||
|
|
9b231718e3 | ||
|
|
0521527fbe |
104
.gitea/workflows/build-and-deploy.yaml
Normal file
104
.gitea/workflows/build-and-deploy.yaml
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# Gitea Actions workflow for building and deploying Zola site from metadata
|
||||||
|
# This workflow runs in the metadata repository when changes are merged to main
|
||||||
|
#
|
||||||
|
# Place this file in the metadata repository:
|
||||||
|
# .gitea/workflows/build-and-deploy.yaml
|
||||||
|
#
|
||||||
|
# Required secrets:
|
||||||
|
# - CONTAINER_TOKEN: Token with read:package permission (for pulling container image)
|
||||||
|
# - AWS_ACCESS_KEY_ID: S3 access key
|
||||||
|
# - AWS_SECRET_ACCESS_KEY: S3 secret key
|
||||||
|
#
|
||||||
|
# Required variables (set in repo settings):
|
||||||
|
# - TEMPLATES_REPO_URL: URL to templates repository (https)
|
||||||
|
# - SCRIPTS_REPO_URL: URL to scripts repository (https)
|
||||||
|
# - S3_ENDPOINT: S3 endpoint URL (e.g., garage.example.com)
|
||||||
|
# - S3_BUCKET: Target S3 bucket name
|
||||||
|
|
||||||
|
name: Build and Deploy Site
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths-ignore:
|
||||||
|
- "Dockerfile"
|
||||||
|
- ".gitea/workflows/build-container.yaml"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY_HOST: git.dwal.in
|
||||||
|
IMAGE_NAME: zola-pwsh-s3
|
||||||
|
TEMPLATES_REPO_URL: ${{ vars.TEMPLATES_REPO_URL }}
|
||||||
|
SCRIPTS_REPO_URL: ${{ vars.SCRIPTS_REPO_URL }}
|
||||||
|
S3_ENDPOINT: ${{ vars.S3_ENDPOINT }}
|
||||||
|
S3_BUCKET: ${{ vars.S3_BUCKET }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# Use custom container with PowerShell, Zola, AWS CLI, Git pre-installed
|
||||||
|
# Built by build-container.yaml workflow from integrations/gitea/Dockerfile
|
||||||
|
container:
|
||||||
|
image: ${{ env.REGISTRY_HOST }}/${{ gitea.repository }}/${{ env.IMAGE_NAME }}:latest
|
||||||
|
credentials:
|
||||||
|
username: ${{ gitea.actor }}
|
||||||
|
password: ${{ secrets.CONTAINER_TOKEN }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout metadata repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: metadata
|
||||||
|
|
||||||
|
- name: Clone templates repository
|
||||||
|
run: |
|
||||||
|
echo "Cloning templates from $TEMPLATES_REPO_URL"
|
||||||
|
git clone "$TEMPLATES_REPO_URL" template
|
||||||
|
|
||||||
|
- name: Clone scripts repository
|
||||||
|
run: |
|
||||||
|
echo "Cloning scripts from $SCRIPTS_REPO_URL"
|
||||||
|
git clone "$SCRIPTS_REPO_URL" scripts
|
||||||
|
|
||||||
|
- name: Convert metadata to Zola content
|
||||||
|
run: |
|
||||||
|
echo "Running PowerShell conversion script"
|
||||||
|
pwsh -File "./scripts/ConvertTo-ZolaContent.ps1" \
|
||||||
|
-MetadataPath "./metadata" \
|
||||||
|
-ZolaContentPath "./template/content"
|
||||||
|
|
||||||
|
- name: Build Zola site
|
||||||
|
run: |
|
||||||
|
cd template
|
||||||
|
zola build
|
||||||
|
echo "Site built successfully"
|
||||||
|
ls -la public/
|
||||||
|
|
||||||
|
- name: Configure AWS CLI for S3
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.aws
|
||||||
|
cat > ~/.aws/credentials << EOF
|
||||||
|
[default]
|
||||||
|
aws_access_key_id = ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
aws_secret_access_key = ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
EOF
|
||||||
|
cat > ~/.aws/config << EOF
|
||||||
|
[default]
|
||||||
|
region = garage
|
||||||
|
output = json
|
||||||
|
s3 =
|
||||||
|
max_concurrent_requests = 20
|
||||||
|
max_queue_size = 10000
|
||||||
|
EOF
|
||||||
|
|
||||||
|
- name: Upload to S3 (Garage)
|
||||||
|
run: |
|
||||||
|
echo "Uploading to s3://$S3_BUCKET with parallel transfers"
|
||||||
|
aws s3 sync ./template/public/ "s3://$S3_BUCKET/" \
|
||||||
|
--endpoint-url "https://$S3_ENDPOINT" \
|
||||||
|
--acl public-read \
|
||||||
|
--exclude "media/*" \
|
||||||
|
--delete \
|
||||||
|
--quiet
|
||||||
|
echo "Upload complete"
|
||||||
65
.gitea/workflows/build-container.yaml
Normal file
65
.gitea/workflows/build-container.yaml
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# Gitea Actions workflow for building the Zola build container
|
||||||
|
# This workflow builds and pushes the container image to Gitea's container registry
|
||||||
|
#
|
||||||
|
# Place this file and Dockerfile in the metadata repository:
|
||||||
|
# .gitea/workflows/build-container.yaml
|
||||||
|
# Dockerfile (in repo root)
|
||||||
|
#
|
||||||
|
# Triggers:
|
||||||
|
# - When Dockerfile changes
|
||||||
|
# - Manual dispatch
|
||||||
|
#
|
||||||
|
# The built image will be available at:
|
||||||
|
# <gitea-url>/<owner>/<repo>/zola-pwsh-s3:latest
|
||||||
|
|
||||||
|
name: Build Container Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "Dockerfile"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: zola-pwsh-s3
|
||||||
|
REGISTRY_HOST: git.dwal.in
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-container:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Docker Build
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Login to Gitea Container Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ env.REGISTRY_HOST }}
|
||||||
|
username: ${{ gitea.actor }}
|
||||||
|
password: ${{ secrets.CONTAINER_TOKEN }}
|
||||||
|
|
||||||
|
- name: Extract metadata for Docker
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: ${{ env.REGISTRY_HOST }}/${{ gitea.repository }}/${{ env.IMAGE_NAME }}
|
||||||
|
tags: |
|
||||||
|
type=raw,value=latest
|
||||||
|
type=sha,prefix=
|
||||||
|
|
||||||
|
- name: Build and push container image
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
cache-from: type=registry,ref=${{ env.REGISTRY_HOST }}/${{ gitea.repository }}/${{ env.IMAGE_NAME }}:buildcache
|
||||||
|
cache-to: type=registry,ref=${{ env.REGISTRY_HOST }}/${{ gitea.repository }}/${{ env.IMAGE_NAME }}:buildcache,mode=max
|
||||||
35
Dockerfile
Normal file
35
Dockerfile
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Minimalistic container for Zola site building from metadata
|
||||||
|
# Contains: PowerShell, Zola, AWS CLI (S3), Git
|
||||||
|
|
||||||
|
FROM alpine:3.20 AS builder
|
||||||
|
|
||||||
|
ARG ZOLA_VERSION=0.22.0
|
||||||
|
|
||||||
|
# Download and extract Zola
|
||||||
|
RUN apk add --no-cache curl tar \
|
||||||
|
&& curl -L "https://github.com/getzola/zola/releases/download/v${ZOLA_VERSION}/zola-v${ZOLA_VERSION}-x86_64-unknown-linux-musl.tar.gz" | tar xz -C /usr/local/bin
|
||||||
|
|
||||||
|
# Final image based on PowerShell Alpine
|
||||||
|
FROM mcr.microsoft.com/powershell:lts-alpine-3.20
|
||||||
|
|
||||||
|
# Copy Zola from builder
|
||||||
|
COPY --from=builder /usr/local/bin/zola /usr/local/bin/zola
|
||||||
|
|
||||||
|
# Install minimal dependencies: git, aws-cli (for S3), ca-certificates, nodejs (for GitHub Actions)
|
||||||
|
RUN apk add --no-cache \
|
||||||
|
git \
|
||||||
|
aws-cli \
|
||||||
|
ca-certificates \
|
||||||
|
nodejs \
|
||||||
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
|
# Verify installations
|
||||||
|
RUN pwsh -Version \
|
||||||
|
&& zola --version \
|
||||||
|
&& aws --version \
|
||||||
|
&& git --version \
|
||||||
|
&& node --version
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
|
|
||||||
|
ENTRYPOINT ["/bin/sh", "-c"]
|
||||||
Reference in New Issue
Block a user