diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..1604ead --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,132 @@ +name: Gitea CI/CD + +on: + workflow_dispatch: + push: + branches: [ "development", "main", "staging"] + tags: [ "v*.*.*" ] + pull_request: + branches: [ "development", "main", "staging" ] + +env: + DOTNET_VERSION: '8.0.x' + DOCKER_IMAGE_NAME: watcher-server + REGISTRY_URL: git.triggermeelmo.com + DOCKER_PLATFORMS: 'linux/amd64,linux/arm64' + TAG: ${{ github.ref == 'refs/heads/main' && 'latest' || github.ref == 'refs/heads/development' && 'development' || github.ref_type == 'tag' && github.ref_name || 'pr' }} + +jobs: + build-and-test: + runs-on: ubuntu-latest + env: + RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + + - name: Restore dependencies + run: dotnet restore + + - name: Build + run: dotnet build --configuration Release --no-restore + + - name: Test + run: dotnet test --no-build --verbosity normal + continue-on-error: true + + - name: Publish + run: dotnet publish -c Release -o out + + set-tag: + name: Set Tag Name + runs-on: ubuntu-latest + env: + RUNNER_TOOL_CACHE: /toolcache + outputs: + tag_name: ${{ steps.set_tag.outputs.tag_name }} + steps: + - uses: actions/checkout@v4 + + - name: Determine next semantic version tag + id: set_tag + run: | + git fetch --tags + + # Find latest tag matching vX.Y.Z + latest_tag=$(git tag --list 'v*.*.*' --sort=-v:refname | head -n 1) + if [[ -z "$latest_tag" ]]; then + major=0 + minor=0 + patch=0 + else + version="${latest_tag#v}" + IFS='.' read -r major minor patch <<< "$version" + fi + + if [[ "${GITHUB_REF}" == "refs/heads/main" ]]; then + major=$((major + 1)) + minor=0 + patch=0 + elif [[ "${GITHUB_REF}" == "refs/heads/development" ]]; then + minor=$((minor + 1)) + patch=0 + else + patch=$((patch + 1)) + fi + + new_tag="v${major}.${minor}.${patch}" + echo "tag_name=${new_tag}" >> $GITHUB_OUTPUT + + docker-build-and-push: + runs-on: ubuntu-latest + env: + RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache + needs: [build-and-test, set-tag] + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Gitea Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY_URL}} + username: ${{ secrets.AUTOMATION_USERNAME }} + password: ${{ secrets.AUTOMATION_PASSWORD }} + + - name: Build and Push Multi-Arch Docker Image + run: | + docker buildx build \ + --platform ${{ env.DOCKER_PLATFORMS }} \ + -t ${{ env.REGISTRY_URL }}/watcher/${{ env.DOCKER_IMAGE_NAME }}:${{ needs.set-tag.outputs.tag_name }} \ + --push . + + tag: + name: Create Tag + needs: [docker-build-and-push] + runs-on: ubuntu-latest + env: + RUNNER_TOOL_CACHE: /toolcache + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Git user + run: | + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + + - name: Create and push tag + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git tag ${{ needs.set-tag.outputs.tag_name }} + git push origin ${{ needs.set-tag.outputs.tag_name }} \ No newline at end of file diff --git a/.gitea/workflows/development-build.yaml b/.gitea/workflows/development-build.yaml deleted file mode 100644 index b3e7bac..0000000 --- a/.gitea/workflows/development-build.yaml +++ /dev/null @@ -1,66 +0,0 @@ -name: Development Build - -on: - push: - branches: - - development - -env: - DOTNET_VERSION: '8.0.x' - DOCKER_IMAGE_NAME: 'watcher-server' - REGISTRY_URL: 'git.triggermeelmo.com/watcher' - DOCKER_PLATFORMS: 'linux/amd64,linux/arm64' - -jobs: - build-and-test: - runs-on: ubuntu-latest - env: - RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3 - with: - dotnet-version: ${{ env.DOTNET_VERSION }} - - - name: Restore dependencies - run: dotnet restore - - - name: Build - run: dotnet build --configuration Release --no-restore - - - name: Test - run: dotnet test --no-build --verbosity normal - continue-on-error: true - - - name: Publish - run: dotnet publish -c Release -o out - - docker-build-and-push: - runs-on: ubuntu-latest - env: - RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache - needs: build-and-test - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Gitea Container Registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY_URL}} - username: ${{ secrets.AUTOMATION_USERNAME }} - password: ${{ secrets.AUTOMATION_PASSWORD }} - - - name: Build and Push Multi-Arch Docker Image - run: | - docker buildx build \ - --platform ${{ env.DOCKER_PLATFORMS }} \ - -t ${{ env.REGISTRY_URL }}/${{ env.DOCKER_IMAGE_NAME }}:development \ - -t ${{ env.REGISTRY_URL }}/${{ env.DOCKER_IMAGE_NAME }}:${{ github.sha }} \ - --push . diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml deleted file mode 100644 index bf599b5..0000000 --- a/.gitea/workflows/release.yaml +++ /dev/null @@ -1,62 +0,0 @@ -name: Release Build and Release - -on: - push: - branches: - - main - -env: - DOTNET_VERSION: '8.0.x' - DOCKER_IMAGE_NAME: 'watcher-server' - REGISTRY_URL: 'git.triggermeelmo.com/watcher' - DOCKER_PLATFORMS: 'linux/amd64,linux/arm64' - -jobs: - build-and-test: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3 - with: - dotnet-version: ${{ env.DOTNET_VERSION }} - - - name: Restore dependencies - run: dotnet restore - - - name: Build - run: dotnet build --configuration Release --no-restore - - - name: Test - run: dotnet test --no-build --verbosity normal - continue-on-error: true - - - name: Publish - run: dotnet publish -c Release -o out - - docker-build-and-push: - runs-on: ubuntu-latest - needs: build-and-test - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Gitea Container Registry - uses: docker/login-action@v2 - with: - registry: git.triggermeelmo.com - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and Push Multi-Arch Docker Image - run: | - docker buildx build \ - --platform ${{ env.DOCKER_PLATFORMS }} \ - -t ${{ env.REGISTRY_URL }}/${{ env.DOCKER_IMAGE_NAME }}:v0.1.0 \ - -t ${{ env.REGISTRY_URL }}/${{ env.DOCKER_IMAGE_NAME }}:${{ github.sha }} \ - --push .