diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 887f9fa..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,16 +0,0 @@ -version: 2 -updates: -- package-ecosystem: nuget - directory: "/" - schedule: - interval: weekly - open-pull-requests-limit: 10 - -- package-ecosystem: github-actions - directory: "/" - schedule: - interval: weekly - groups: - actions: - patterns: - - "*" diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 0000000..3a30059 --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,44 @@ +{ + "extends": [ + "config:recommended" + ], + "dependencyDashboard": false, + "labels": [ + "area-dependencies" + ], + "enabledManagers": [ + "nuget", + "github-actions" + ], + "packageRules": [ + { + "matchManagers": [ + "nuget" + ], + "matchFileNames": [ + "src/**" + ], + "groupName": "all-dependencies", + "automerge": true, + "labels": [ + "area-dependencies" + ] + }, + { + "matchManagers": [ + "github-actions" + ], + "matchFileNames": [ + ".github/workflows/**" + ], + "groupName": "all-dependencies", + "automerge": true, + "labels": [ + "area-dependencies" + ] + } + ], + "automergeType": "pr", + "prHourlyLimit": 15, + "prConcurrentLimit": 15 +} diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index f650b5a..0000000 --- a/.github/stale.yml +++ /dev/null @@ -1,60 +0,0 @@ -# Configuration for probot-stale - https://github.com/probot/stale - -# Number of days of inactivity before an Issue or Pull Request becomes stale -daysUntilStale: 14 - -# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. -# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. -daysUntilClose: 14 - -# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) -onlyLabels: [] - -# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable -exemptLabels: - - pinned - - security - - "[Status] Maybe Later" - -# Set to true to ignore issues in a project (defaults to false) -exemptProjects: false - -# Set to true to ignore issues in a milestone (defaults to false) -exemptMilestones: false - -# Set to true to ignore issues with an assignee (defaults to false) -exemptAssignees: false - -# Label to use when marking as stale -staleLabel: stale - -# Comment to post when marking as stale. Set to `false` to disable -markComment: > - Automatically marked as stale due to no recent activity. - It will be closed if no further activity occurs. Thank you for your contributions. - -# Comment to post when removing the stale label. -unmarkComment: > - Removed stale label. - -# Comment to post when closing a stale Issue or Pull Request. -closeComment: > - Automatically closed stale item. - -# Limit the number of actions per hour, from 1-30. Default is 30 -limitPerRun: 30 - -# Limit to only `issues` or `pulls` -# only: issues - -# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': -# pulls: -# daysUntilStale: 30 -# markComment: > -# This pull request has been automatically marked as stale because it has not had -# recent activity. It will be closed if no further activity occurs. Thank you -# for your contributions. - -# issues: -# exemptLabels: -# - confirmed \ No newline at end of file diff --git a/.github/workflows/pipeline.yaml b/.github/workflows/main.yaml similarity index 96% rename from .github/workflows/pipeline.yaml rename to .github/workflows/main.yaml index 09a252a..8d11d62 100644 --- a/.github/workflows/pipeline.yaml +++ b/.github/workflows/main.yaml @@ -1,162 +1,162 @@ -name: Pipeline - -on: - push: - paths: - - "src/**" - - ".github/workflows/**" - pull_request: - paths: - - "src/**" - - ".github/workflows/**" - -env: - version: 9.0.${{github.run_number}} - imageRepository: "emberstack/kubernetes-reflector" - DOCKER_CLI_EXPERIMENTAL: "enabled" - -jobs: - ci: - name: CI - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: artifacts - prepare directories - run: | - mkdir -p .artifacts/helm - mkdir -p .artifacts/kubectl - - - name: helm - import README - run: cp README.md src/helm/reflector/README.md - - - name: helm - package chart - run: helm package --destination .artifacts/helm --version ${{env.version}} --app-version ${{env.version}} src/helm/reflector - - - name: helm - template chart - run: helm template --namespace kube-system reflector .artifacts/helm/reflector-${{env.version}}.tgz > .artifacts/kubectl/reflector-${{env.version}}.yaml - - - name: "artifacts - upload - helm chart" - uses: actions/upload-artifact@v4 - with: - name: helm - path: .artifacts/helm - - - name: "artifacts - upload - kubectl manifests" - uses: actions/upload-artifact@v4 - with: - name: kubectl - path: .artifacts/kubectl - - - name: "docker - build PR" - if: github.event_name == 'pull_request' - run: | - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - docker buildx create --name builder --driver docker-container --use - docker buildx inspect --bootstrap - docker buildx build --platform linux/amd64 -t ${{env.imageRepository}}:build-${{env.version}}-amd64 -f src/ES.Kubernetes.Reflector/Dockerfile src/ - docker buildx build --platform linux/arm -t ${{env.imageRepository}}:build-${{env.version}}-arm32v7 -f src/ES.Kubernetes.Reflector/Dockerfile src/ - docker buildx build --platform linux/arm64 -t ${{env.imageRepository}}:build-${{env.version}}-arm64v8 -f src/ES.Kubernetes.Reflector/Dockerfile src/ - - - name: tools - docker - login - if: github.event_name == 'push' && github.actor != 'dependabot[bot]' - uses: docker/login-action@v3 - with: - username: ${{ secrets.ES_DOCKERHUB_USERNAME }} - password: ${{ secrets.ES_DOCKERHUB_PAT }} - - - name: "docker - build and publish" - if: github.event_name == 'push' && github.actor != 'dependabot[bot]' - run: | - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - docker buildx create --name builder --driver docker-container --use - docker buildx inspect --bootstrap - docker buildx build --push --platform linux/amd64 --provenance=false -t ${{env.imageRepository}}:build-${{env.version}}-amd64 -f src/ES.Kubernetes.Reflector/Dockerfile src/ - docker buildx build --push --platform linux/arm --provenance=false -t ${{env.imageRepository}}:build-${{env.version}}-arm32v7 -f src/ES.Kubernetes.Reflector/Dockerfile src/ - docker buildx build --push --platform linux/arm64 --provenance=false -t ${{env.imageRepository}}:build-${{env.version}}-arm64v8 -f src/ES.Kubernetes.Reflector/Dockerfile src/ - docker pull --platform linux/amd64 ${{env.imageRepository}}:build-${{env.version}}-amd64 - docker pull --platform linux/arm/v7 ${{env.imageRepository}}:build-${{env.version}}-arm32v7 - docker pull --platform linux/arm64 ${{env.imageRepository}}:build-${{env.version}}-arm64v8 - docker manifest create ${{env.imageRepository}}:build-${{env.version}} ${{env.imageRepository}}:build-${{env.version}}-amd64 ${{env.imageRepository}}:build-${{env.version}}-arm32v7 ${{env.imageRepository}}:build-${{env.version}}-arm64v8 - docker manifest inspect ${{env.imageRepository}}:build-${{env.version}} - docker manifest push ${{env.imageRepository}}:build-${{env.version}} - - cd: - name: CD - needs: ci - if: github.event_name == 'push' && github.ref == 'refs/heads/main' - runs-on: ubuntu-latest - steps: - - name: tools - docker - login - uses: docker/login-action@v3 - with: - username: ${{ secrets.ES_DOCKERHUB_USERNAME }} - password: ${{ secrets.ES_DOCKERHUB_PAT }} - - - name: artifacts - download - helm chart - uses: actions/download-artifact@v4 - with: - name: helm - path: .artifacts/helm - - - name: artifacts - download - kubectl manifests - uses: actions/download-artifact@v4 - with: - name: kubectl - path: .artifacts/kubectl - - - name: "docker - tag and push" - run: | - docker pull ${{env.imageRepository}}:build-${{env.version}}-amd64 - docker pull ${{env.imageRepository}}:build-${{env.version}}-arm32v7 - docker pull ${{env.imageRepository}}:build-${{env.version}}-arm64v8 - docker manifest create ${{env.imageRepository}}:${{env.version}} ${{env.imageRepository}}:build-${{env.version}}-amd64 ${{env.imageRepository}}:build-${{env.version}}-arm32v7 ${{env.imageRepository}}:build-${{env.version}}-arm64v8 - docker manifest create ${{env.imageRepository}}:latest ${{env.imageRepository}}:build-${{env.version}}-amd64 ${{env.imageRepository}}:build-${{env.version}}-arm32v7 ${{env.imageRepository}}:build-${{env.version}}-arm64v8 - docker manifest push ${{env.imageRepository}}:${{env.version}} - docker manifest push ${{env.imageRepository}}:latest - docker manifest push ${{env.imageRepository}}:${{env.version}} - docker manifest push ${{env.imageRepository}}:latest - docker tag ${{env.imageRepository}}:build-${{env.version}}-amd64 ${{env.imageRepository}}:${{env.version}}-amd64 - docker tag ${{env.imageRepository}}:build-${{env.version}}-arm32v7 ${{env.imageRepository}}:${{env.version}}-arm32v7 - docker tag ${{env.imageRepository}}:build-${{env.version}}-arm64v8 ${{env.imageRepository}}:${{env.version}}-arm64v8 - docker push ${{env.imageRepository}}:${{env.version}}-amd64 - docker push ${{env.imageRepository}}:${{env.version}}-arm32v7 - docker push ${{env.imageRepository}}:${{env.version}}-arm64v8 - - - name: github - checkout - helm-charts - uses: actions/checkout@v4 - with: - repository: emberstack/helm-charts - token: ${{ secrets.ES_GITHUB_PAT }} - path: helm-charts - ref: main - - - name: github - publish - chart - run: | - mkdir -p helm-charts/repository/reflector - cp .artifacts/helm/reflector-${{env.version}}.tgz helm-charts/repository/reflector - - cd helm-charts - - git config user.name "Romeo Dumitrescu" - git config user.email "5931333+winromulus@users.noreply.github.com" - git add . - git status - git commit -m "Added reflector-${{env.version}}.tgz" - git push - - - name: github - release - set manifest name - run: | - mkdir -p github - cp .artifacts/kubectl/reflector-${{env.version}}.yaml github/reflector.yaml - - - name: github - create release - uses: softprops/action-gh-release@v2 - with: - repository: emberstack/kubernetes-reflector - tag_name: v${{env.version}} - body: The release process is automated. - generate_release_notes: true - token: ${{ secrets.ES_GITHUB_PAT }} - files: | - github/reflector.yaml +name: Main Workflow + +on: + push: + paths: + - "src/**" + - ".github/workflows/main.yaml" + pull_request: + paths: + - "src/**" + - ".github/workflows/main.yaml" + +env: + version: 9.0.${{github.run_number}} + imageRepository: "emberstack/kubernetes-reflector" + DOCKER_CLI_EXPERIMENTAL: "enabled" + +jobs: + ci: + name: CI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: artifacts - prepare directories + run: | + mkdir -p .artifacts/helm + mkdir -p .artifacts/kubectl + + - name: helm - import README + run: cp README.md src/helm/reflector/README.md + + - name: helm - package chart + run: helm package --destination .artifacts/helm --version ${{env.version}} --app-version ${{env.version}} src/helm/reflector + + - name: helm - template chart + run: helm template --namespace kube-system reflector .artifacts/helm/reflector-${{env.version}}.tgz > .artifacts/kubectl/reflector-${{env.version}}.yaml + + - name: "artifacts - upload - helm chart" + uses: actions/upload-artifact@v4 + with: + name: helm + path: .artifacts/helm + + - name: "artifacts - upload - kubectl manifests" + uses: actions/upload-artifact@v4 + with: + name: kubectl + path: .artifacts/kubectl + + - name: "docker - build PR" + if: github.event_name == 'pull_request' + run: | + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name builder --driver docker-container --use + docker buildx inspect --bootstrap + docker buildx build --platform linux/amd64 -t ${{env.imageRepository}}:build-${{env.version}}-amd64 -f src/ES.Kubernetes.Reflector/Dockerfile src/ + docker buildx build --platform linux/arm -t ${{env.imageRepository}}:build-${{env.version}}-arm32v7 -f src/ES.Kubernetes.Reflector/Dockerfile src/ + docker buildx build --platform linux/arm64 -t ${{env.imageRepository}}:build-${{env.version}}-arm64v8 -f src/ES.Kubernetes.Reflector/Dockerfile src/ + + - name: tools - docker - login + if: github.event_name == 'push' && github.actor != 'dependabot[bot]' + uses: docker/login-action@v3 + with: + username: ${{ secrets.ES_DOCKERHUB_USERNAME }} + password: ${{ secrets.ES_DOCKERHUB_PAT }} + + - name: "docker - build and publish" + if: github.event_name == 'push' && github.actor != 'dependabot[bot]' + run: | + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name builder --driver docker-container --use + docker buildx inspect --bootstrap + docker buildx build --push --platform linux/amd64 --provenance=false -t ${{env.imageRepository}}:build-${{env.version}}-amd64 -f src/ES.Kubernetes.Reflector/Dockerfile src/ + docker buildx build --push --platform linux/arm --provenance=false -t ${{env.imageRepository}}:build-${{env.version}}-arm32v7 -f src/ES.Kubernetes.Reflector/Dockerfile src/ + docker buildx build --push --platform linux/arm64 --provenance=false -t ${{env.imageRepository}}:build-${{env.version}}-arm64v8 -f src/ES.Kubernetes.Reflector/Dockerfile src/ + docker pull --platform linux/amd64 ${{env.imageRepository}}:build-${{env.version}}-amd64 + docker pull --platform linux/arm/v7 ${{env.imageRepository}}:build-${{env.version}}-arm32v7 + docker pull --platform linux/arm64 ${{env.imageRepository}}:build-${{env.version}}-arm64v8 + docker manifest create ${{env.imageRepository}}:build-${{env.version}} ${{env.imageRepository}}:build-${{env.version}}-amd64 ${{env.imageRepository}}:build-${{env.version}}-arm32v7 ${{env.imageRepository}}:build-${{env.version}}-arm64v8 + docker manifest inspect ${{env.imageRepository}}:build-${{env.version}} + docker manifest push ${{env.imageRepository}}:build-${{env.version}} + + cd: + name: CD + needs: ci + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + steps: + - name: tools - docker - login + uses: docker/login-action@v3 + with: + username: ${{ secrets.ES_DOCKERHUB_USERNAME }} + password: ${{ secrets.ES_DOCKERHUB_PAT }} + + - name: artifacts - download - helm chart + uses: actions/download-artifact@v4 + with: + name: helm + path: .artifacts/helm + + - name: artifacts - download - kubectl manifests + uses: actions/download-artifact@v4 + with: + name: kubectl + path: .artifacts/kubectl + + - name: "docker - tag and push" + run: | + docker pull ${{env.imageRepository}}:build-${{env.version}}-amd64 + docker pull ${{env.imageRepository}}:build-${{env.version}}-arm32v7 + docker pull ${{env.imageRepository}}:build-${{env.version}}-arm64v8 + docker manifest create ${{env.imageRepository}}:${{env.version}} ${{env.imageRepository}}:build-${{env.version}}-amd64 ${{env.imageRepository}}:build-${{env.version}}-arm32v7 ${{env.imageRepository}}:build-${{env.version}}-arm64v8 + docker manifest create ${{env.imageRepository}}:latest ${{env.imageRepository}}:build-${{env.version}}-amd64 ${{env.imageRepository}}:build-${{env.version}}-arm32v7 ${{env.imageRepository}}:build-${{env.version}}-arm64v8 + docker manifest push ${{env.imageRepository}}:${{env.version}} + docker manifest push ${{env.imageRepository}}:latest + docker manifest push ${{env.imageRepository}}:${{env.version}} + docker manifest push ${{env.imageRepository}}:latest + docker tag ${{env.imageRepository}}:build-${{env.version}}-amd64 ${{env.imageRepository}}:${{env.version}}-amd64 + docker tag ${{env.imageRepository}}:build-${{env.version}}-arm32v7 ${{env.imageRepository}}:${{env.version}}-arm32v7 + docker tag ${{env.imageRepository}}:build-${{env.version}}-arm64v8 ${{env.imageRepository}}:${{env.version}}-arm64v8 + docker push ${{env.imageRepository}}:${{env.version}}-amd64 + docker push ${{env.imageRepository}}:${{env.version}}-arm32v7 + docker push ${{env.imageRepository}}:${{env.version}}-arm64v8 + + - name: github - checkout - helm-charts + uses: actions/checkout@v4 + with: + repository: emberstack/helm-charts + token: ${{ secrets.ES_GITHUB_PAT }} + path: helm-charts + ref: main + + - name: github - publish - chart + run: | + mkdir -p helm-charts/repository/reflector + cp .artifacts/helm/reflector-${{env.version}}.tgz helm-charts/repository/reflector + + cd helm-charts + + git config user.name "Romeo Dumitrescu" + git config user.email "5931333+winromulus@users.noreply.github.com" + git add . + git status + git commit -m "Added reflector-${{env.version}}.tgz" + git push + + - name: github - release - set manifest name + run: | + mkdir -p github + cp .artifacts/kubectl/reflector-${{env.version}}.yaml github/reflector.yaml + + - name: github - create release + uses: softprops/action-gh-release@v2 + with: + repository: emberstack/kubernetes-reflector + tag_name: v${{env.version}} + body: The release process is automated. + generate_release_notes: true + token: ${{ secrets.ES_GITHUB_PAT }} + files: | + github/reflector.yaml diff --git a/.github/workflows/renovate.yaml b/.github/workflows/renovate.yaml new file mode 100644 index 0000000..c0a2938 --- /dev/null +++ b/.github/workflows/renovate.yaml @@ -0,0 +1,23 @@ +name: Renovate + +on: + schedule: + - cron: '0 5 * * *' # daily at 5am UTC + pull_request: + merge_group: + workflow_dispatch: + +jobs: + renovate: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Run Renovate + uses: renovatebot/github-action@v41.0.22 + with: + token: ${{ secrets.ES_GITHUB_PAT }} + env: + RENOVATE_REPOSITORIES: ${{ github.repository }} + RENOVATE_GIT_AUTHOR: "Emberstack Renovate " diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml new file mode 100644 index 0000000..6e51f38 --- /dev/null +++ b/.github/workflows/stale.yaml @@ -0,0 +1,43 @@ +name: Stale + +on: + schedule: + - cron: '0 0 * * *' # Runs daily at midnight UTC + workflow_dispatch: # Allows manual triggering + +permissions: + issues: write + pull-requests: write + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + # General behavior + stale-issue-message: > + Automatically marked as stale due to no recent activity. + It will be closed if no further activity occurs. Thank you for your contributions. + close-issue-message: > + Automatically closed stale item. + stale-pr-message: > + Automatically marked as stale due to no recent activity. + It will be closed if no further activity occurs. Thank you for your contributions. + close-pr-message: > + Automatically closed stale item. + + days-before-stale: 14 + days-before-close: 14 + + # Labels + stale-issue-label: 'stale' + stale-pr-label: 'stale' + + exempt-issue-labels: 'pinned,security,[Status] Maybe Later' + exempt-pr-labels: 'pinned,security,[Status] Maybe Later' + + # Limits + operations-per-run: 30 \ No newline at end of file diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index c4c1341..d80f222 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -4,12 +4,12 @@ false - - - - - - + + + + + +