name: Build and Publish on: release: types: [created] jobs: build-server: name: Build Server Image runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Checkout source code uses: actions/checkout@v4 - name: Build and push the Docker image uses: docker/build-push-action@v6 with: context: . push: true build-args: | PUBLIC_API_URL=https://opt-api.osdci.net tags: | ghcr.io/project-optima/ttscm-ui:latest ghcr.io/project-optima/ttscm-ui:${{ github.event.release.tag_name }} build-desktop-macos: name: Build Desktop (macOS) runs-on: macos-latest permissions: contents: write steps: - name: Checkout source code uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 22 - name: Install bun uses: oven-sh/setup-bun@v2 - name: Install dependencies run: bun install --frozen-lockfile - name: Rebuild native modules run: npm rebuild - name: Build macOS distributables run: bun run make:macos env: PUBLIC_API_URL: https://opt-api.osdci.net - name: Upload macOS artifacts to release uses: softprops/action-gh-release@v2 with: files: | out/make/**/*.dmg out/make/**/*.zip build-desktop-windows: name: Build Desktop (Windows) runs-on: windows-latest permissions: contents: write steps: - name: Checkout source code uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 22 - name: Install dependencies run: npm install - name: Build Windows distributables run: npm run make -- --platform win32 env: PUBLIC_API_URL: https://opt-api.osdci.net - name: Upload Windows artifacts to release uses: softprops/action-gh-release@v2 with: files: | out/make/**/*.exe out/make/**/*.nupkg out/make/**/*.msi deploy: name: Deploy needs: [build-server] runs-on: ubuntu-latest steps: - name: Set the Kubernetes context uses: azure/k8s-set-context@v2 with: method: kubeconfig kubeconfig: ${{ secrets.KUBECONFIG }} - name: Checkout source code uses: actions/checkout@v4 - name: Lint Kubernetes manifests uses: azure/k8s-lint@v3 with: lintType: dryrun manifests: | kubernetes/deployment.yaml kubernetes/ingress.yaml namespace: optima - name: Deploy to the Kubernetes cluster uses: azure/k8s-deploy@v5 with: namespace: optima force: true skip-tls-verify: true manifests: | kubernetes/deployment.yaml kubernetes/ingress.yaml images: | ghcr.io/project-optima/ttscm-ui:${{ github.event.release.tag_name }}