optimize github actions build speed
This commit is contained in:
57
.github/actions/build-and-upload-windows-package/action.yml
vendored
Normal file
57
.github/actions/build-and-upload-windows-package/action.yml
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
name: Build packages for windows and upload to artifact
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
package-file-name-prefix:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
package-artifact-name-prefix:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
backend-artifact-name-prefix:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Download windows-x64 backend file
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.backend-artifact-name-prefix }}-windows-x64
|
||||||
|
path: ${{ runner.temp }}\backend
|
||||||
|
|
||||||
|
- name: Download linux-amd64 packaged files
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.package-artifact-name-prefix }}-linux-amd64
|
||||||
|
path: ${{ runner.temp }}\package
|
||||||
|
|
||||||
|
- name: Extract frontend files from linux-amd64 package
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
New-Item -ItemType Directory -Path package
|
||||||
|
tar -xzf (Get-ChildItem ${{ runner.temp }}\package\${{ inputs.package-file-name-prefix }}-linux-amd64.tar.gz) -C package
|
||||||
|
|
||||||
|
- name: Package windows-x64 package
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
New-Item -ItemType Directory -Path "ezbookkeeping"
|
||||||
|
New-Item -ItemType Directory -Path "ezbookkeeping\data"
|
||||||
|
New-Item -ItemType Directory -Path "ezbookkeeping\storage"
|
||||||
|
New-Item -ItemType Directory -Path "ezbookkeeping\log"
|
||||||
|
Copy-Item ${{ runner.temp }}\backend\ezbookkeeping.exe -Destination ezbookkeeping\
|
||||||
|
Copy-Item -Recurse -Force package\public -Destination ezbookkeeping\public
|
||||||
|
Copy-Item -Recurse -Force conf -Destination ezbookkeeping\conf
|
||||||
|
Copy-Item -Recurse -Force templates -Destination ezbookkeeping\templates
|
||||||
|
Copy-Item .\LICENSE -Destination ezbookkeeping\
|
||||||
|
Push-Location ezbookkeeping
|
||||||
|
7z a -r -tzip -mx9 ..\${{ inputs.package-file-name-prefix }}-windows-x64.zip *
|
||||||
|
Pop-Location
|
||||||
|
Remove-Item -Recurse -Force ezbookkeeping
|
||||||
|
|
||||||
|
- name: Upload windows artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.package-artifact-name-prefix }}-windows-x64
|
||||||
|
path: ${{ inputs.package-file-name-prefix }}-windows-x64.zip
|
||||||
|
if-no-files-found: error
|
||||||
98
.github/actions/build-linux-docker/action.yml
vendored
Normal file
98
.github/actions/build-linux-docker/action.yml
vendored
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
name: Build docker image for linux
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
release-build:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
check-3rd-api:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
skip-tests:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
platform:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
platform-name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-push:
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
docker-image-name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-username:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
docker-password:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
docker-bake-meta-file-path:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-bake-meta-artifact-name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-bake-digests-file-path:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-bake-digests-artifact-name-prefix:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
- name: Download docker bake meta artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.docker-bake-meta-artifact-name }}
|
||||||
|
path: ${{ runner.temp }}
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: ${{ inputs.docker-username != '' && inputs.docker-password != '' }}
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ inputs.docker-username }}
|
||||||
|
password: ${{ inputs.docker-password }}
|
||||||
|
|
||||||
|
- name: Build docker for ${{ inputs.platform-name }}
|
||||||
|
id: bake
|
||||||
|
uses: docker/bake-action@v6
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
./docker-bake.hcl
|
||||||
|
cwd://${{ inputs.docker-bake-meta-file-path }}
|
||||||
|
source: .
|
||||||
|
load: true
|
||||||
|
targets: image
|
||||||
|
set: |
|
||||||
|
*.tags=${{ inputs.docker-image-name }}
|
||||||
|
*.platform=${{ inputs.platform }}
|
||||||
|
*.args.RELEASE_BUILD=${{ inputs.release-build }}
|
||||||
|
*.args.BUILD_PIPELINE=1
|
||||||
|
*.args.CHECK_3RD_API=${{ inputs.check-3rd-api }}
|
||||||
|
*.args.SKIP_TESTS=${{ inputs.skip-tests }}
|
||||||
|
*.output=type=image,push-by-digest=${{ inputs.docker-push }},name-canonical=true,push=${{ inputs.docker-push }}
|
||||||
|
*.output+=type=tar,dest=${{ runner.temp }}/docker-image.tar
|
||||||
|
|
||||||
|
- name: Export digests file for ${{ inputs.platform-name }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
digest="${{ fromJSON(steps.bake.outputs.metadata).image['containerimage.digest'] }}"
|
||||||
|
mkdir -p ${{ inputs.docker-bake-digests-file-path }}
|
||||||
|
touch "${{ inputs.docker-bake-digests-file-path }}/${digest#sha256:}"
|
||||||
|
|
||||||
|
- name: Upload ${{ inputs.platform-name }} digests artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.docker-bake-digests-artifact-name-prefix }}-${{ inputs.platform-name }}
|
||||||
|
path: ${{ inputs.docker-bake-digests-file-path }}/*
|
||||||
|
if-no-files-found: error
|
||||||
68
.github/actions/build-windows-backend/action.yml
vendored
Normal file
68
.github/actions/build-windows-backend/action.yml
vendored
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
name: Build backend file for windows
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
go-version:
|
||||||
|
required: false
|
||||||
|
default: "1.25.1"
|
||||||
|
mingw-version:
|
||||||
|
required: false
|
||||||
|
default: "14.2.0"
|
||||||
|
mingw-revison:
|
||||||
|
required: false
|
||||||
|
default: "v12-rev2"
|
||||||
|
release-build:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
check-3rd-api:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
skip-tests:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
backend-artifact-name-prefix:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v6
|
||||||
|
with:
|
||||||
|
go-version: ${{ inputs.go-version }}
|
||||||
|
|
||||||
|
- name: Install MinGW
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
$mingwVersion = "${{ inputs.mingw-version }}"
|
||||||
|
$mingwRevision = "${{ inputs.mingw-revison }}"
|
||||||
|
$url = "https://github.com/niXman/mingw-builds-binaries/releases/download/${mingwVersion}-rt_${mingwRevision}/x86_64-${mingwVersion}-release-posix-seh-ucrt-rt_${mingwRevision}.7z"
|
||||||
|
$archive = "C:\mingw.7z"
|
||||||
|
$mingwDir = "C:\mingw64"
|
||||||
|
|
||||||
|
Write-Host "Downloading MinGW from ${url}"
|
||||||
|
Invoke-WebRequest -Uri ${url} -OutFile ${archive}
|
||||||
|
|
||||||
|
Remove-Item -Recurse -Force ${mingwDir}
|
||||||
|
New-Item -ItemType Directory -Path ${mingwDir}
|
||||||
|
|
||||||
|
Write-Host "Extracting MinGW to ${mingwDir}"
|
||||||
|
7z x ${archive} -oC:\
|
||||||
|
"${mingwDir}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
|
|
||||||
|
- name: Build backend for windows-x64
|
||||||
|
shell: pwsh
|
||||||
|
env:
|
||||||
|
RELEASE_BUILD: "${{ inputs.release-build }}"
|
||||||
|
BUILD_PIPELINE: "1"
|
||||||
|
CHECK_3RD_API: "${{ inputs.check-3rd-api }}"
|
||||||
|
SKIP_TESTS: "${{ inputs.skip-tests }}"
|
||||||
|
run: |
|
||||||
|
.\build.ps1 backend
|
||||||
|
|
||||||
|
- name: Upload windows backend artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.backend-artifact-name-prefix }}-windows-x64
|
||||||
|
path: ezbookkeeping.exe
|
||||||
|
if-no-files-found: error
|
||||||
58
.github/actions/push-linux-docker/action.yml
vendored
Normal file
58
.github/actions/push-linux-docker/action.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
name: Push linux docker multi-arch image to registry
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
docker-image-name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-username:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-password:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-bake-meta-file-path:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-bake-meta-artifact-name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-bake-digests-file-path:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-bake-digests-artifact-name-prefix:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-image-tags:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Download docker bake meta artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.docker-bake-meta-artifact-name }}
|
||||||
|
path: ${{ runner.temp }}
|
||||||
|
|
||||||
|
- name: Download digests artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: ${{ inputs.docker-bake-digests-artifact-name-prefix }}-*
|
||||||
|
merge-multiple: true
|
||||||
|
path: ${{ inputs.docker-bake-digests-file-path }}
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ inputs.docker-username }}
|
||||||
|
password: ${{ inputs.docker-password }}
|
||||||
|
|
||||||
|
- name: Create manifest and push
|
||||||
|
shell: bash
|
||||||
|
working-directory: ${{ inputs.docker-bake-digests-file-path }}
|
||||||
|
run: |
|
||||||
|
docker buildx imagetools create $(echo "${{ inputs.docker-image-tags }}" | xargs -I {} echo -n " -t {}") $(printf '${{ inputs.docker-image-name }}@sha256:%s ' *)
|
||||||
53
.github/actions/upload-linux-package/action.yml
vendored
Normal file
53
.github/actions/upload-linux-package/action.yml
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
name: Upload linux package to artifact
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
platform:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
platform-name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-image-name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-version:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-username:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
docker-password:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
package-file-name-prefix:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
package-artifact-name-prefix:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: ${{ inputs.docker-username != '' && inputs.docker-password != '' }}
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ inputs.docker-username }}
|
||||||
|
password: ${{ inputs.docker-password }}
|
||||||
|
|
||||||
|
- name: Pull and save packaged files for ${{ inputs.platform-name }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
docker pull --platform ${{ inputs.platform }} ${{ inputs.docker-image-name }}:${{ inputs.docker-version }}
|
||||||
|
containerid=$(docker create "${{ inputs.docker-image-name }}:${{ inputs.docker-version }}")
|
||||||
|
docker cp ${containerid}:/ezbookkeeping ./ezbookkeeping
|
||||||
|
cd ezbookkeeping
|
||||||
|
tar -czf ../${{ inputs.package-file-name-prefix }}-${{ inputs.platform-name }}.tar.gz *
|
||||||
|
|
||||||
|
- name: Upload artifact for ${{ inputs.platform-name }}
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.package-artifact-name-prefix }}-${{ inputs.platform-name }}
|
||||||
|
path: ${{ inputs.package-file-name-prefix }}-${{ inputs.platform-name }}.tar.gz
|
||||||
|
if-no-files-found: error
|
||||||
82
.github/workflows/build-non-main-branch.yml
vendored
82
.github/workflows/build-non-main-branch.yml
vendored
@@ -6,27 +6,69 @@ on:
|
|||||||
- main
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
setup:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
docker-tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
docker-labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
ezbookkeeping-docker-bake-meta-file-path: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}
|
||||||
|
ezbookkeeping-docker-bake-meta-artifact-name: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_artifact_name }}
|
||||||
|
ezbookkeeping-docker-digests-file-path: ${{ steps.variable.outputs.ezbookkeeping_docker_digests_file_path }}
|
||||||
|
ezbookkeeping-docker-digests-artifact-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_docker_digests_artifact_name_prefix }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
|
tags: |
|
||||||
|
type=raw,value=dev-${{ github.run_id }}
|
||||||
|
|
||||||
|
- name: Set up variables
|
||||||
|
id: variable
|
||||||
|
run: |
|
||||||
|
echo "ezbookkeeping_docker_bake_meta_file_path=${{ runner.temp }}/bake-meta.json" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_bake_meta_artifact_name=ezbookkeeping-build-dev-docker-bake-meta-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_digests_file_path=${{ runner.temp }}/digests" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_digests_artifact_name_prefix=ezbookkeeping-dev-digests-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Rename docker bake meta file
|
||||||
|
run: |
|
||||||
|
mv "${{ steps.meta.outputs.bake-file }}" "${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}"
|
||||||
|
|
||||||
|
- name: Upload docker bake meta artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_artifact_name }}
|
||||||
|
path: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
build-linux-docker:
|
build-linux-docker:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- setup
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- platform: linux/amd64
|
||||||
|
platform-name: linux-amd64
|
||||||
steps:
|
steps:
|
||||||
-
|
- name: Checkout
|
||||||
name: Checkout
|
uses: actions/checkout@v5
|
||||||
uses: actions/checkout@v4
|
|
||||||
-
|
- uses: ./.github/actions/build-linux-docker
|
||||||
name: Login to DockerHub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
check-3rd-api: ${{ vars.CHECK_3RD_API }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
skip-tests: ${{ vars.SKIP_TESTS }}
|
||||||
-
|
platform: ${{ matrix.platform }}
|
||||||
name: Build
|
platform-name: ${{ matrix.platform-name }}
|
||||||
uses: docker/build-push-action@v6
|
docker-push: false
|
||||||
with:
|
docker-image-name: ${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
file: Dockerfile
|
docker-bake-meta-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-file-path }}
|
||||||
context: .
|
docker-bake-meta-artifact-name: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-artifact-name }}
|
||||||
platforms: linux/amd64
|
docker-bake-digests-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-file-path }}
|
||||||
push: false
|
docker-bake-digests-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-artifact-name-prefix }}
|
||||||
build-args: |
|
|
||||||
BUILD_PIPELINE=1
|
|
||||||
CHECK_3RD_API=${{ vars.CHECK_3RD_API }}
|
|
||||||
SKIP_TESTS=${{ vars.SKIP_TESTS }}
|
|
||||||
|
|||||||
292
.github/workflows/build-release.yml
vendored
292
.github/workflows/build-release.yml
vendored
@@ -6,214 +6,186 @@ on:
|
|||||||
- "v*.*.*"
|
- "v*.*.*"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-linux-docker:
|
setup:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
image-tag: ${{ steps.meta.outputs.version }}
|
docker-version: ${{ steps.meta.outputs.version }}
|
||||||
|
docker-tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
docker-labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
ezbookkeeping-docker-bake-meta-file-path: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}
|
||||||
|
ezbookkeeping-docker-bake-meta-artifact-name: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_artifact_name }}
|
||||||
|
ezbookkeeping-docker-digests-file-path: ${{ steps.variable.outputs.ezbookkeeping_docker_digests_file_path }}
|
||||||
|
ezbookkeeping-docker-digests-artifact-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_docker_digests_artifact_name_prefix }}
|
||||||
|
ezbookkeeping-package-file-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_package_file_name_prefix }}
|
||||||
|
ezbookkeeping-package-artifact-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_package_artifact_name_prefix }}
|
||||||
|
ezbookkeeping-backend-artifact-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_backend_artifact_name_prefix }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
${{ secrets.DOCKER_USERNAME }}/ezbookkeeping
|
${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
tags: |
|
tags: |
|
||||||
type=semver,pattern={{version}}
|
type=semver,pattern={{version}}
|
||||||
type=semver,pattern={{major}}.{{minor}}
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
type=raw,value=latest
|
type=raw,value=latest
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up variables
|
||||||
uses: docker/setup-qemu-action@v3
|
id: variable
|
||||||
|
run: |
|
||||||
|
echo "ezbookkeeping_docker_bake_meta_file_path=${{ runner.temp }}/bake-meta.json" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_bake_meta_artifact_name=ezbookkeeping-build-release-docker-bake-meta-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_digests_file_path=${{ runner.temp }}/digests" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_digests_artifact_name_prefix=ezbookkeeping-release-digests-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_package_file_name_prefix=ezbookkeeping-${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_package_artifact_name_prefix=ezbookkeeping-build-release-package-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_backend_artifact_name_prefix=ezbookkeeping-build-release-backend-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Rename docker bake meta file
|
||||||
|
run: |
|
||||||
|
mv "${{ steps.meta.outputs.bake-file }}" "${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}"
|
||||||
|
|
||||||
|
- name: Upload docker bake meta artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
image: tonistiigi/binfmt:qemu-v8.1.5
|
name: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_artifact_name }}
|
||||||
|
path: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
build-linux-docker:
|
||||||
uses: docker/setup-buildx-action@v3
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- setup
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- platform: linux/amd64
|
||||||
|
platform-name: linux-amd64
|
||||||
|
- platform: linux/arm64/v8
|
||||||
|
platform-name: linux-arm64
|
||||||
|
- platform: linux/arm/v7
|
||||||
|
platform-name: linux-armv7
|
||||||
|
- platform: linux/arm/v6
|
||||||
|
platform-name: linux-armv6
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- uses: ./.github/actions/build-linux-docker
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
release-build: 1
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
check-3rd-api: ${{ vars.CHECK_3RD_API }}
|
||||||
|
skip-tests: ${{ vars.SKIP_TESTS }}
|
||||||
|
platform: ${{ matrix.platform }}
|
||||||
|
platform-name: ${{ matrix.platform-name }}
|
||||||
|
docker-push: true
|
||||||
|
docker-image-name: ${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
|
docker-username: ${{ vars.DOCKER_USERNAME }}
|
||||||
|
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
docker-bake-meta-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-file-path }}
|
||||||
|
docker-bake-meta-artifact-name: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-artifact-name }}
|
||||||
|
docker-bake-digests-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-file-path }}
|
||||||
|
docker-bake-digests-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-artifact-name-prefix }}
|
||||||
|
|
||||||
- name: Build and push
|
push-linux-docker:
|
||||||
uses: docker/build-push-action@v6
|
needs:
|
||||||
|
- setup
|
||||||
|
- build-linux-docker
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- uses: ./.github/actions/push-linux-docker
|
||||||
with:
|
with:
|
||||||
file: Dockerfile
|
docker-image-name: ${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
context: .
|
docker-username: ${{ vars.DOCKER_USERNAME }}
|
||||||
platforms: |
|
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
linux/amd64
|
docker-bake-meta-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-file-path }}
|
||||||
linux/arm64/v8
|
docker-bake-meta-artifact-name: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-artifact-name }}
|
||||||
linux/arm/v7
|
docker-bake-digests-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-file-path }}
|
||||||
linux/arm/v6
|
docker-bake-digests-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-artifact-name-prefix }}
|
||||||
push: true
|
docker-image-tags: ${{ needs.setup.outputs.docker-tags }}
|
||||||
build-args: |
|
|
||||||
RELEASE_BUILD=1
|
|
||||||
BUILD_PIPELINE=1
|
|
||||||
CHECK_3RD_API=${{ vars.CHECK_3RD_API }}
|
|
||||||
SKIP_TESTS=${{ vars.SKIP_TESTS }}
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
|
|
||||||
upload-linux-artifact:
|
upload-linux-package:
|
||||||
needs: build-linux-docker
|
needs:
|
||||||
|
- setup
|
||||||
|
- push-linux-docker
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- arch: linux/amd64
|
- platform: linux/amd64
|
||||||
arch_alias: linux-amd64
|
platform-name: linux-amd64
|
||||||
- arch: linux/arm64/v8
|
- platform: linux/arm64/v8
|
||||||
arch_alias: linux-arm64
|
platform-name: linux-arm64
|
||||||
- arch: linux/arm/v7
|
- platform: linux/arm/v7
|
||||||
arch_alias: linux-armv7
|
platform-name: linux-armv7
|
||||||
- arch: linux/arm/v6
|
- platform: linux/arm/v6
|
||||||
arch_alias: linux-armv6
|
platform-name: linux-armv6
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- uses: ./.github/actions/upload-linux-package
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
platform: ${{ matrix.platform }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
platform-name: ${{ matrix.platform-name }}
|
||||||
|
docker-image-name: ${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
|
docker-version: ${{ needs.setup.outputs.docker-version }}
|
||||||
|
docker-username: ${{ vars.DOCKER_USERNAME }}
|
||||||
|
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
package-file-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-file-name-prefix }}
|
||||||
|
package-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-artifact-name-prefix }}
|
||||||
|
|
||||||
- name: Pull and save packaged files for ${{ matrix.arch }}
|
build-windows-backend:
|
||||||
run: |
|
needs:
|
||||||
VERSION=${{ needs.build-linux-docker.outputs.image-tag }}
|
- setup
|
||||||
IMAGE=${{ secrets.DOCKER_USERNAME }}/ezbookkeeping:${VERSION}
|
runs-on: windows-latest
|
||||||
docker pull --platform ${{ matrix.arch }} ${IMAGE}
|
steps:
|
||||||
cid=$(docker create "${IMAGE}")
|
- name: Checkout
|
||||||
docker cp ${cid}:/ezbookkeeping ./ezbookkeeping
|
uses: actions/checkout@v5
|
||||||
docker rm ${cid}
|
|
||||||
cd ezbookkeeping
|
|
||||||
tar -czf ../ezbookkeeping-v${VERSION}-${{ matrix.arch_alias }}.tar.gz *
|
|
||||||
cd ..
|
|
||||||
rm -rf ezbookkeeping
|
|
||||||
|
|
||||||
- name: Upload artifact
|
- uses: ./.github/actions/build-windows-backend
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
with:
|
||||||
name: ezbookkeeping-${{ github.ref_name }}-${{ matrix.arch_alias }}
|
release-build: 1
|
||||||
path: ezbookkeeping-${{ github.ref_name }}-${{ matrix.arch_alias }}.tar.gz
|
check-3rd-api: ${{ vars.CHECK_3RD_API }}
|
||||||
if-no-files-found: error
|
skip-tests: ${{ vars.SKIP_TESTS }}
|
||||||
|
backend-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-backend-artifact-name-prefix }}
|
||||||
|
|
||||||
build-and-upload-windows-package:
|
build-and-upload-windows-package:
|
||||||
needs: upload-linux-artifact
|
needs:
|
||||||
|
- setup
|
||||||
|
- build-windows-backend
|
||||||
|
- upload-linux-package
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
env:
|
|
||||||
GO_VERSION: "1.25.1"
|
|
||||||
MINGW_VERSION: "14.2.0"
|
|
||||||
MINGW_REVISION: "v12-rev2"
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Download linux-amd64 packaged files
|
- uses: ./.github/actions/build-and-upload-windows-package
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
with:
|
||||||
name: ezbookkeeping-${{ github.ref_name }}-linux-amd64
|
package-file-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-file-name-prefix }}
|
||||||
path: artifacts
|
package-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-artifact-name-prefix }}
|
||||||
|
backend-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-backend-artifact-name-prefix }}
|
||||||
- name: Extract frontend files from linux-amd64 package
|
|
||||||
run: |
|
|
||||||
New-Item -ItemType Directory -Path package
|
|
||||||
tar -xzf (Get-ChildItem artifacts\ezbookkeeping-${{ github.ref_name }}-linux-amd64.tar.gz) -C package
|
|
||||||
|
|
||||||
- name: Set up Go
|
|
||||||
uses: actions/setup-go@v6
|
|
||||||
with:
|
|
||||||
go-version: ${{ env.GO_VERSION }}
|
|
||||||
|
|
||||||
- name: Install MinGW
|
|
||||||
run: |
|
|
||||||
$mingwVersion = "${{ env.MINGW_VERSION }}"
|
|
||||||
$mingwRevision = "${{ env.MINGW_REVISION }}"
|
|
||||||
$url = "https://github.com/niXman/mingw-builds-binaries/releases/download/${mingwVersion}-rt_${mingwRevision}/x86_64-${mingwVersion}-release-posix-seh-ucrt-rt_${mingwRevision}.7z"
|
|
||||||
$archive = "C:\mingw.7z"
|
|
||||||
$mingwDir = "C:\mingw64"
|
|
||||||
|
|
||||||
Write-Host "Downloading MinGW from ${url}"
|
|
||||||
Invoke-WebRequest -Uri ${url} -OutFile ${archive}
|
|
||||||
|
|
||||||
Remove-Item -Recurse -Force ${mingwDir}
|
|
||||||
New-Item -ItemType Directory -Path ${mingwDir}
|
|
||||||
|
|
||||||
Write-Host "Extracting MinGW to ${mingwDir}"
|
|
||||||
7z x ${archive} -oC:\
|
|
||||||
"${mingwDir}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
||||||
|
|
||||||
- name: Build backend for windows-x64
|
|
||||||
env:
|
|
||||||
RELEASE_BUILD: "1"
|
|
||||||
BUILD_PIPELINE: "1"
|
|
||||||
CHECK_3RD_API: ${{ vars.CHECK_3RD_API }}
|
|
||||||
SKIP_TESTS: ${{ vars.SKIP_TESTS }}
|
|
||||||
run: |
|
|
||||||
.\build.ps1 backend
|
|
||||||
|
|
||||||
- name: Package Windows build
|
|
||||||
run: |
|
|
||||||
New-Item -ItemType Directory -Path "ezbookkeeping"
|
|
||||||
New-Item -ItemType Directory -Path "ezbookkeeping\data"
|
|
||||||
New-Item -ItemType Directory -Path "ezbookkeeping\storage"
|
|
||||||
New-Item -ItemType Directory -Path "ezbookkeeping\log"
|
|
||||||
Copy-Item ezbookkeeping.exe -Destination ezbookkeeping\
|
|
||||||
Copy-Item -Recurse -Force package\public -Destination ezbookkeeping\public
|
|
||||||
Copy-Item -Recurse -Force conf -Destination ezbookkeeping\conf
|
|
||||||
Copy-Item -Recurse -Force templates -Destination ezbookkeeping\templates
|
|
||||||
Copy-Item .\LICENSE -Destination ezbookkeeping\
|
|
||||||
Push-Location ezbookkeeping
|
|
||||||
7z a -r -tzip -mx9 ..\ezbookkeeping-${{ github.ref_name }}-windows-x64.zip *
|
|
||||||
Pop-Location
|
|
||||||
Remove-Item -Recurse -Force ezbookkeeping
|
|
||||||
|
|
||||||
- name: Upload Windows artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ezbookkeeping-${{ github.ref_name }}-windows-x64
|
|
||||||
path: ezbookkeeping-${{ github.ref_name }}-windows-x64.zip
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
publish-release:
|
publish-release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs:
|
needs:
|
||||||
- upload-linux-artifact
|
- setup
|
||||||
|
- upload-linux-package
|
||||||
- build-and-upload-windows-package
|
- build-and-upload-windows-package
|
||||||
steps:
|
steps:
|
||||||
- name: Download linux-amd64 packaged files
|
- name: Download all packaged files
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ezbookkeeping-${{ github.ref_name }}-linux-amd64
|
pattern: ${{ needs.setup.outputs.ezbookkeeping_package_artifact_name_prefix }}-*
|
||||||
path: ./release-files
|
merge-multiple: true
|
||||||
|
path: release-files
|
||||||
- name: Download linux-arm64 packaged files
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ezbookkeeping-${{ github.ref_name }}-linux-arm64
|
|
||||||
path: ./release-files
|
|
||||||
|
|
||||||
- name: Download linux-armv6 packaged files
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ezbookkeeping-${{ github.ref_name }}-linux-armv6
|
|
||||||
path: ./release-files
|
|
||||||
|
|
||||||
- name: Download linux-armv7 packaged files
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ezbookkeeping-${{ github.ref_name }}-linux-armv7
|
|
||||||
path: ./release-files
|
|
||||||
|
|
||||||
- name: Download windows-x64 packaged files
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ezbookkeeping-${{ github.ref_name }}-windows-x64
|
|
||||||
path: ./release-files
|
|
||||||
|
|
||||||
- name: Publish Release ${{ github.ref_name }}
|
- name: Publish Release ${{ github.ref_name }}
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
|
|||||||
254
.github/workflows/build-snapshot.yml
vendored
254
.github/workflows/build-snapshot.yml
vendored
@@ -6,173 +6,167 @@ on:
|
|||||||
- main
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-linux-docker:
|
setup:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
image-tag: ${{ steps.meta.outputs.version }}
|
docker-version: ${{ steps.meta.outputs.version }}
|
||||||
|
docker-tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
docker-labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
ezbookkeeping-docker-bake-meta-file-path: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}
|
||||||
|
ezbookkeeping-docker-bake-meta-artifact-name: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_artifact_name }}
|
||||||
|
ezbookkeeping-docker-digests-file-path: ${{ steps.variable.outputs.ezbookkeeping_docker_digests_file_path }}
|
||||||
|
ezbookkeeping-docker-digests-artifact-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_docker_digests_artifact_name_prefix }}
|
||||||
|
ezbookkeeping-package-file-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_package_file_name_prefix }}
|
||||||
|
ezbookkeeping-package-artifact-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_package_artifact_name_prefix }}
|
||||||
|
ezbookkeeping-backend-artifact-name-prefix: ${{ steps.variable.outputs.ezbookkeeping_backend_artifact_name_prefix }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
${{ secrets.DOCKER_USERNAME }}/ezbookkeeping
|
${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
tags: |
|
tags: |
|
||||||
type=raw,value=SNAPSHOT-{{date 'YYYYMMDD'}}-${{ github.run_id }}
|
type=raw,value=SNAPSHOT-{{date 'YYYYMMDD'}}-${{ github.run_id }}
|
||||||
type=raw,value=SNAPSHOT-{{date 'YYYYMMDD'}}
|
type=raw,value=SNAPSHOT-{{date 'YYYYMMDD'}}
|
||||||
type=raw,value=latest-snapshot
|
type=raw,value=latest-snapshot
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up variables
|
||||||
uses: docker/setup-qemu-action@v3
|
id: variable
|
||||||
|
run: |
|
||||||
|
echo "ezbookkeeping_docker_bake_meta_file_path=${{ runner.temp }}/bake-meta.json" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_bake_meta_artifact_name=ezbookkeeping-build-dev-docker-bake-meta-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_digests_file_path=${{ runner.temp }}/digests" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_docker_digests_artifact_name_prefix=ezbookkeeping-dev-digests-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_package_file_name_prefix=ezbookkeeping-dev-package-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_package_artifact_name_prefix=ezbookkeeping-build-dev-package-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "ezbookkeeping_backend_artifact_name_prefix=ezbookkeeping-build-dev-backend-${{ github.run_id }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Rename docker bake meta file
|
||||||
|
run: |
|
||||||
|
mv "${{ steps.meta.outputs.bake-file }}" "${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}"
|
||||||
|
|
||||||
|
- name: Upload docker bake meta artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
image: tonistiigi/binfmt:qemu-v8.1.5
|
name: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_artifact_name }}
|
||||||
|
path: ${{ steps.variable.outputs.ezbookkeeping_docker_bake_meta_file_path }}
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
build-linux-docker:
|
||||||
uses: docker/setup-buildx-action@v3
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- setup
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- platform: linux/amd64
|
||||||
|
platform-name: linux-amd64
|
||||||
|
- platform: linux/arm64/v8
|
||||||
|
platform-name: linux-arm64
|
||||||
|
- platform: linux/arm/v7
|
||||||
|
platform-name: linux-armv7
|
||||||
|
- platform: linux/arm/v6
|
||||||
|
platform-name: linux-armv6
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- uses: ./.github/actions/build-linux-docker
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
check-3rd-api: ${{ vars.CHECK_3RD_API }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
skip-tests: ${{ vars.SKIP_TESTS }}
|
||||||
|
platform: ${{ matrix.platform }}
|
||||||
|
platform-name: ${{ matrix.platform-name }}
|
||||||
|
docker-push: true
|
||||||
|
docker-image-name: ${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
|
docker-username: ${{ vars.DOCKER_USERNAME }}
|
||||||
|
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
docker-bake-meta-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-file-path }}
|
||||||
|
docker-bake-meta-artifact-name: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-artifact-name }}
|
||||||
|
docker-bake-digests-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-file-path }}
|
||||||
|
docker-bake-digests-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-artifact-name-prefix }}
|
||||||
|
|
||||||
- name: Build and push
|
push-linux-docker:
|
||||||
uses: docker/build-push-action@v6
|
needs:
|
||||||
|
- setup
|
||||||
|
- build-linux-docker
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- uses: ./.github/actions/push-linux-docker
|
||||||
with:
|
with:
|
||||||
file: Dockerfile
|
docker-image-name: ${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
context: .
|
docker-username: ${{ vars.DOCKER_USERNAME }}
|
||||||
platforms: |
|
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
linux/amd64
|
docker-bake-meta-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-file-path }}
|
||||||
linux/arm64/v8
|
docker-bake-meta-artifact-name: ${{ needs.setup.outputs.ezbookkeeping-docker-bake-meta-artifact-name }}
|
||||||
linux/arm/v7
|
docker-bake-digests-file-path: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-file-path }}
|
||||||
linux/arm/v6
|
docker-bake-digests-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-docker-digests-artifact-name-prefix }}
|
||||||
push: true
|
docker-image-tags: ${{ needs.setup.outputs.docker-tags }}
|
||||||
build-args: |
|
|
||||||
BUILD_PIPELINE=1
|
|
||||||
CHECK_3RD_API=${{ vars.CHECK_3RD_API }}
|
|
||||||
SKIP_TESTS=${{ vars.SKIP_TESTS }}
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
|
|
||||||
upload-linux-artifact:
|
upload-linux-package:
|
||||||
needs: build-linux-docker
|
needs:
|
||||||
|
- setup
|
||||||
|
- push-linux-docker
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- arch: linux/amd64
|
- platform: linux/amd64
|
||||||
arch_alias: linux-amd64
|
platform-name: linux-amd64
|
||||||
- arch: linux/arm64/v8
|
- platform: linux/arm64/v8
|
||||||
arch_alias: linux-arm64
|
platform-name: linux-arm64
|
||||||
- arch: linux/arm/v7
|
- platform: linux/arm/v7
|
||||||
arch_alias: linux-armv7
|
platform-name: linux-armv7
|
||||||
- arch: linux/arm/v6
|
- platform: linux/arm/v6
|
||||||
arch_alias: linux-armv6
|
platform-name: linux-armv6
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- uses: ./.github/actions/upload-linux-package
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
platform: ${{ matrix.platform }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
platform-name: ${{ matrix.platform-name }}
|
||||||
|
docker-image-name: ${{ vars.DOCKER_IMAGE_NAME }}
|
||||||
|
docker-version: ${{ needs.setup.outputs.docker-version }}
|
||||||
|
docker-username: ${{ vars.DOCKER_USERNAME }}
|
||||||
|
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
package-file-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-file-name-prefix }}
|
||||||
|
package-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-artifact-name-prefix }}
|
||||||
|
|
||||||
- name: Pull and save packaged files for ${{ matrix.arch }}
|
build-windows-backend:
|
||||||
run: |
|
needs:
|
||||||
TAG=${{ needs.build-linux-docker.outputs.image-tag }}
|
- setup
|
||||||
IMAGE=${{ secrets.DOCKER_USERNAME }}/ezbookkeeping:${TAG}
|
runs-on: windows-latest
|
||||||
docker pull --platform ${{ matrix.arch }} ${IMAGE}
|
steps:
|
||||||
cid=$(docker create "${IMAGE}")
|
- name: Checkout
|
||||||
docker cp ${cid}:/ezbookkeeping ./ezbookkeeping
|
uses: actions/checkout@v5
|
||||||
docker rm ${cid}
|
|
||||||
cd ezbookkeeping
|
|
||||||
tar -czf ../ezbookkeeping-dev-${{ github.run_id }}-${{ matrix.arch_alias }}.tar.gz *
|
|
||||||
cd ..
|
|
||||||
rm -rf ezbookkeeping
|
|
||||||
|
|
||||||
- name: Upload artifact
|
- uses: ./.github/actions/build-windows-backend
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
with:
|
||||||
name: ezbookkeeping-dev-${{ github.run_id }}-${{ matrix.arch_alias }}
|
check-3rd-api: ${{ vars.CHECK_3RD_API }}
|
||||||
path: ezbookkeeping-dev-${{ github.run_id }}-${{ matrix.arch_alias }}.tar.gz
|
skip-tests: ${{ vars.SKIP_TESTS }}
|
||||||
if-no-files-found: error
|
backend-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-backend-artifact-name-prefix }}
|
||||||
|
|
||||||
build-and-upload-windows-package:
|
build-and-upload-windows-package:
|
||||||
needs: upload-linux-artifact
|
needs:
|
||||||
|
- setup
|
||||||
|
- build-windows-backend
|
||||||
|
- upload-linux-package
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
env:
|
|
||||||
GO_VERSION: "1.25.1"
|
|
||||||
MINGW_VERSION: "14.2.0"
|
|
||||||
MINGW_REVISION: "v12-rev2"
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Download linux-amd64 packaged files
|
- uses: ./.github/actions/build-and-upload-windows-package
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
with:
|
||||||
name: ezbookkeeping-dev-${{ github.run_id }}-linux-amd64
|
package-file-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-file-name-prefix }}
|
||||||
path: artifacts
|
package-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-artifact-name-prefix }}
|
||||||
|
backend-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-backend-artifact-name-prefix }}
|
||||||
- name: Extract frontend files from linux-amd64 package
|
|
||||||
run: |
|
|
||||||
New-Item -ItemType Directory -Path package
|
|
||||||
tar -xzf (Get-ChildItem artifacts\ezbookkeeping-dev-${{ github.run_id }}-linux-amd64.tar.gz) -C package
|
|
||||||
|
|
||||||
- name: Set up Go
|
|
||||||
uses: actions/setup-go@v6
|
|
||||||
with:
|
|
||||||
go-version: ${{ env.GO_VERSION }}
|
|
||||||
|
|
||||||
- name: Install MinGW
|
|
||||||
run: |
|
|
||||||
$mingwVersion = "${{ env.MINGW_VERSION }}"
|
|
||||||
$mingwRevision = "${{ env.MINGW_REVISION }}"
|
|
||||||
$url = "https://github.com/niXman/mingw-builds-binaries/releases/download/${mingwVersion}-rt_${mingwRevision}/x86_64-${mingwVersion}-release-posix-seh-ucrt-rt_${mingwRevision}.7z"
|
|
||||||
$archive = "C:\mingw.7z"
|
|
||||||
$mingwDir = "C:\mingw64"
|
|
||||||
|
|
||||||
Write-Host "Downloading MinGW from ${url}"
|
|
||||||
Invoke-WebRequest -Uri ${url} -OutFile ${archive}
|
|
||||||
|
|
||||||
Remove-Item -Recurse -Force ${mingwDir}
|
|
||||||
New-Item -ItemType Directory -Path ${mingwDir}
|
|
||||||
|
|
||||||
Write-Host "Extracting MinGW to ${mingwDir}"
|
|
||||||
7z x ${archive} -oC:\
|
|
||||||
"${mingwDir}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
||||||
|
|
||||||
- name: Build backend for windows-x64
|
|
||||||
env:
|
|
||||||
BUILD_PIPELINE: "1"
|
|
||||||
CHECK_3RD_API: ${{ vars.CHECK_3RD_API }}
|
|
||||||
SKIP_TESTS: ${{ vars.SKIP_TESTS }}
|
|
||||||
run: |
|
|
||||||
.\build.ps1 backend
|
|
||||||
|
|
||||||
- name: Package Windows build
|
|
||||||
run: |
|
|
||||||
New-Item -ItemType Directory -Path "ezbookkeeping"
|
|
||||||
New-Item -ItemType Directory -Path "ezbookkeeping\data"
|
|
||||||
New-Item -ItemType Directory -Path "ezbookkeeping\storage"
|
|
||||||
New-Item -ItemType Directory -Path "ezbookkeeping\log"
|
|
||||||
Copy-Item ezbookkeeping.exe -Destination ezbookkeeping\
|
|
||||||
Copy-Item -Recurse -Force package\public -Destination ezbookkeeping\public
|
|
||||||
Copy-Item -Recurse -Force conf -Destination ezbookkeeping\conf
|
|
||||||
Copy-Item -Recurse -Force templates -Destination ezbookkeeping\templates
|
|
||||||
Copy-Item .\LICENSE -Destination ezbookkeeping\
|
|
||||||
Push-Location ezbookkeeping
|
|
||||||
7z a -r -tzip -mx9 ..\ezbookkeeping-dev-${{ github.run_id }}-windows-x64.zip *
|
|
||||||
Pop-Location
|
|
||||||
Remove-Item -Recurse -Force ezbookkeeping
|
|
||||||
|
|
||||||
- name: Upload Windows artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ezbookkeeping-dev-${{ github.run_id }}-windows-x64
|
|
||||||
path: ezbookkeeping-dev-${{ github.run_id }}-windows-x64.zip
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|||||||
34
docker-bake.hcl
Normal file
34
docker-bake.hcl
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
variable "DEFAULT_TAG" {
|
||||||
|
default = "ezbookkeeping:local"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Special target: https://github.com/docker/metadata-action#bake-definition
|
||||||
|
target "docker-metadata-action" {
|
||||||
|
tags = ["${DEFAULT_TAG}"]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default target if none specified
|
||||||
|
group "default" {
|
||||||
|
targets = ["image-local"]
|
||||||
|
}
|
||||||
|
|
||||||
|
target "image" {
|
||||||
|
inherits = ["docker-metadata-action"]
|
||||||
|
context = "./"
|
||||||
|
dockerfile = "Dockerfile"
|
||||||
|
}
|
||||||
|
|
||||||
|
target "image-local" {
|
||||||
|
inherits = ["image"]
|
||||||
|
output = ["type=docker"]
|
||||||
|
}
|
||||||
|
|
||||||
|
target "image-all" {
|
||||||
|
inherits = ["image"]
|
||||||
|
platforms = [
|
||||||
|
"linux/amd64",
|
||||||
|
"linux/arm64",
|
||||||
|
"linux/arm/v7",
|
||||||
|
"linux/arm/v6"
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user