name: Build Release on: push: tags: - "v*.*.*" jobs: setup: runs-on: ubuntu-latest outputs: build-unix-time: ${{ steps.variable.outputs.build_unix_time }} build-date: ${{ steps.variable.outputs.build_date }} 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: - name: Checkout uses: actions/checkout@v5 - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: | ${{ vars.DOCKER_IMAGE_NAME }} tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=raw,value=latest - name: Set up variables id: variable run: | echo "build_unix_time=$(date '+%s')" >> "$GITHUB_OUTPUT" echo "build_date=$(date '+%Y%m%d')" >> "$GITHUB_OUTPUT" 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-build-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: 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-and-package-x86: runs-on: ubuntu-24.04 needs: - setup steps: - name: Checkout uses: actions/checkout@v5 - uses: ./.github/actions/build-linux-docker-and-package with: release-build: 1 build-unix-time: ${{ needs.setup.outputs.build-unix-time }} build-date: ${{ needs.setup.outputs.build-date }} check-3rd-api: ${{ vars.CHECK_3RD_API }} skip-tests: ${{ vars.SKIP_TESTS }} platform: linux/amd64 platform-name: linux-amd64 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 }} package-file-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-file-name-prefix }} package-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-artifact-name-prefix }} build-linux-docker-and-package-arm: runs-on: ubuntu-24.04-arm needs: - setup strategy: matrix: include: - 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 - uses: ./.github/actions/build-linux-docker-and-package with: release-build: 1 build-unix-time: ${{ needs.setup.outputs.build-unix-time }} build-date: ${{ needs.setup.outputs.build-date }} 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 }} package-file-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-file-name-prefix }} package-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-artifact-name-prefix }} push-linux-docker: needs: - setup - build-linux-docker-and-package-x86 - build-linux-docker-and-package-arm runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 - uses: ./.github/actions/push-linux-docker with: 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 }} docker-image-tags: ${{ needs.setup.outputs.docker-tags }} build-windows-backend: needs: - setup runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v5 - uses: ./.github/actions/build-windows-backend with: release-build: 1 build-unix-time: ${{ needs.setup.outputs.build-unix-time }} build-date: ${{ needs.setup.outputs.build-date }} check-3rd-api: ${{ vars.CHECK_3RD_API }} skip-tests: ${{ vars.SKIP_TESTS }} backend-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-backend-artifact-name-prefix }} build-windows-package: needs: - setup - build-windows-backend - build-linux-docker-and-package-x86 runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v5 - uses: ./.github/actions/build-windows-package with: package-file-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-file-name-prefix }} package-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-package-artifact-name-prefix }} backend-artifact-name-prefix: ${{ needs.setup.outputs.ezbookkeeping-backend-artifact-name-prefix }} publish-release: runs-on: ubuntu-latest needs: - setup - build-linux-docker-and-package-x86 - build-linux-docker-and-package-arm - build-windows-package - push-linux-docker steps: - name: Download all packaged files uses: actions/download-artifact@v4 with: pattern: ${{ needs.setup.outputs.ezbookkeeping-package-artifact-name-prefix }}-* merge-multiple: true path: release-files - name: Publish Release ${{ github.ref_name }} uses: softprops/action-gh-release@v2 with: name: ${{ github.ref_name }} tag_name: ${{ github.ref_name }} files: ./release-files/* draft: true