diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a841d44..20c60df 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,12 +3,13 @@ name: Rust Cross-Platform Build on: workflow_dispatch: push: - branches: [ "main", "feature/*", bug/* ] + branches: [ "development", "main", "feature/*", bug/* ] pull_request: - branches: [ "main" ] + branches: [ "development", "main" ] env: CARGO_TERM_COLOR: always + DOCKER_IMAGE_NAME: "watcher-agent" jobs: detect-project: @@ -126,16 +127,67 @@ jobs: echo "Cleaning up Docker images..." docker system prune -a -f || echo "Docker cleanup failed" + docker-build: + name: Build Docker Images + needs: [native-build, windows-cross] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Download Linux artifact + uses: actions/download-artifact@v3 + with: + name: linux-binary + path: linux-bin + + - name: Download Windows artifact + uses: actions/download-artifact@v3 + with: + name: windows-binary + path: windows-bin + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} + + - name: Build and push Linux Docker image + uses: docker/build-push-action@v4 + with: + context: . + file: Dockerfile.linux + platforms: linux/amd64 + push: ${{ github.event_name != 'pull_request' }} + tags: | + ${{ env.DOCKER_IMAGE_NAME }}:linux-latest + ${{ env.DOCKER_IMAGE_NAME }}:linux-${{ github.sha }} + build-args: | + BINARY_PATH=linux-bin/${{ needs.detect-project.outputs.project-name }} + + - name: Build and push Windows Docker image + uses: docker/build-push-action@v4 + with: + context: . + file: Dockerfile.windows + platforms: windows-amd64 + push: ${{ github.event_name != 'pull_request' }} + tags: | + ${{ env.DOCKER_IMAGE_NAME }}:windows-latest + ${{ env.DOCKER_IMAGE_NAME }}:windows-${{ github.sha }} + build-args: | + BINARY_PATH=windows-bin/${{ needs.detect-project.outputs.project-name }}.exe + cleanup: name: Cleanup if: always() - needs: [native-build, windows-cross] + needs: [docker-build, native-build, windows-cross] runs-on: ubuntu-latest steps: - name: Cleanup Docker images if: contains(needs.*.result, 'failure') - run: | - echo "One or more jobs failed. Performing cleanup..." - docker system prune -a -f || echo "Docker cleanup failed" - env: - DOCKER_CLI_HINTS: false \ No newline at end of file + run: docker system prune -a -f \ No newline at end of file diff --git a/.gitignore b/.gitignore index ab951f8..9c4549d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,9 @@ target/ # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html Cargo.lock +# VS Code +.vscode/ + # These are backup files generated by rustfmt **/*.rs.bk diff --git a/Dockerfile.linux b/Dockerfile.linux new file mode 100644 index 0000000..792002d Binary files /dev/null and b/Dockerfile.linux differ diff --git a/Dockerfile.windows b/Dockerfile.windows new file mode 100644 index 0000000..6d2b20a --- /dev/null +++ b/Dockerfile.windows @@ -0,0 +1,11 @@ +# Using Windows Server Core as base +FROM mcr.microsoft.com/windows/servercore:ltsc2022 + +# Create app directory +WORKDIR C:/app + +# Copy the Windows binary +ARG BINARY_PATH +COPY ${BINARY_PATH} watcher_agent.exe + +ENTRYPOINT ["C:/app/watcher_agent.exe"] \ No newline at end of file