Merge branch 'master' of https://github.com/yohaybn/Israeli-Financial… #113
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Publish | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - master | |
| tags: | |
| - 'v*' | |
| env: | |
| REGISTRY: ghcr.io | |
| jobs: | |
| # Bump patch version on every push to main/master (skipped on tag pushes and on the | |
| # bot's own follow-up commit). Uses GITHUB_TOKEN; the resulting commit/tag will not | |
| # retrigger this workflow, so build-app/build-addon must `needs:` this job to see | |
| # the new version in ha-addon/config.yaml + server/package.json. | |
| bump-version: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| if: >- | |
| github.event_name == 'push' && | |
| !startsWith(github.ref, 'refs/tags/') && | |
| !contains(github.event.head_commit.message, '[skip ci]') && | |
| !contains(github.event.head_commit.message, 'chore(release):') | |
| outputs: | |
| version: ${{ steps.bump.outputs.version }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Use Node 20 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| - name: Bump patch version | |
| id: bump | |
| run: | | |
| node scripts/bump-version.mjs patch | |
| NEW_VERSION=$(node -e "console.log(require('./server/package.json').version)") | |
| echo "version=$NEW_VERSION" >> "$GITHUB_OUTPUT" | |
| - name: Commit and tag | |
| env: | |
| NEW_VERSION: ${{ steps.bump.outputs.version }} | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
| git add ha-addon/config.yaml server/package.json Dockerfile | |
| if git diff --cached --quiet; then | |
| echo "No version change to commit." | |
| exit 0 | |
| fi | |
| git commit -m "chore(release): ${NEW_VERSION} [skip ci]" | |
| git tag "v${NEW_VERSION}" | |
| git push | |
| git push --tags | |
| build-app: | |
| runs-on: ubuntu-latest | |
| needs: [bump-version] | |
| if: | | |
| always() && | |
| (needs.bump-version.result == 'success' || needs.bump-version.result == 'skipped') | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| # Pull the freshly-bumped commit (HEAD on the branch already moved by bump-version). | |
| with: | |
| ref: ${{ github.ref }} | |
| - name: Set Docker image name (lowercase for GHCR) | |
| run: echo "IMAGE_NAME=$(echo '${{ github.repository }}' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV | |
| - name: Resolve image version | |
| id: ver | |
| # Prefer the bumped version (set on push to main); fall back to ha-addon/config.yaml on tag pushes. | |
| run: | | |
| v="${{ needs.bump-version.outputs.version }}" | |
| if [ -z "$v" ]; then | |
| v=$(awk -F'"' '/^version:/ {print $2; exit}' ha-addon/config.yaml) | |
| fi | |
| echo "version=$v" >> "$GITHUB_OUTPUT" | |
| echo "Resolved version: $v" | |
| - name: Log in to the Container registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build and push App image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| file: ./Dockerfile.app | |
| push: true | |
| platforms: linux/amd64,linux/arm64,linux/arm/v7 | |
| tags: | | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-app:${{ steps.ver.outputs.version }} | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-app:main | |
| build-args: | | |
| VITE_APP_BUILD_VERSION=v${{ steps.ver.outputs.version }}@${{ github.sha }} | |
| VITE_INSTALL_KIND=docker | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| build-addon: | |
| needs: [bump-version, build-app] | |
| if: | | |
| always() && | |
| needs.build-app.result == 'success' && | |
| (needs.bump-version.result == 'success' || needs.bump-version.result == 'skipped') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| packages: write | |
| strategy: | |
| matrix: | |
| arch: [amd64, aarch64, armv7] | |
| include: | |
| - arch: amd64 | |
| platform: linux/amd64 | |
| - arch: aarch64 | |
| platform: linux/arm64 | |
| - arch: armv7 | |
| platform: linux/arm/v7 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.ref }} | |
| - name: Set Docker image name (lowercase for GHCR) | |
| run: echo "IMAGE_NAME=$(echo '${{ github.repository }}' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV | |
| - name: Resolve image version | |
| id: ver | |
| # Use bumped version from bump-version job; fall back to the version line in ha-addon/config.yaml. | |
| # HA Supervisor pulls images at exactly this tag (matching ha-addon/config.yaml `version`). | |
| run: | | |
| v="${{ needs.bump-version.outputs.version }}" | |
| if [ -z "$v" ]; then | |
| v=$(awk -F'"' '/^version:/ {print $2; exit}' ha-addon/config.yaml) | |
| fi | |
| echo "version=$v" >> "$GITHUB_OUTPUT" | |
| echo "Resolved version: $v" | |
| - name: Log in to the Container registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build and push Add-on image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| file: ./Dockerfile | |
| push: true | |
| platforms: ${{ matrix.platform }} | |
| tags: | | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-addon-${{ matrix.arch }}:${{ steps.ver.outputs.version }} | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-addon-${{ matrix.arch }}:main | |
| build-args: | | |
| BUILD_FROM=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-app:${{ steps.ver.outputs.version }} | |
| BUILD_VERSION=${{ steps.ver.outputs.version }} | |
| VITE_APP_BUILD_VERSION=v${{ steps.ver.outputs.version }}@${{ github.sha }} | |
| VITE_INSTALL_KIND=docker | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max |