From fb0b82591b1a66f302c1b4adae9cab667d0f6862 Mon Sep 17 00:00:00 2001 From: Victor Martinez Date: Mon, 7 Oct 2024 12:21:53 +0200 Subject: [PATCH] feat: undeploy-my-kibana (#140) --- .../test-oblt-cli-undeploy-my-kibana.yml | 69 ++++++++++++++ oblt-cli/undeploy-my-kibana/README.md | 50 +++++++++++ oblt-cli/undeploy-my-kibana/action.yml | 90 +++++++++++++++++++ 3 files changed, 209 insertions(+) create mode 100644 .github/workflows/test-oblt-cli-undeploy-my-kibana.yml create mode 100644 oblt-cli/undeploy-my-kibana/README.md create mode 100644 oblt-cli/undeploy-my-kibana/action.yml diff --git a/.github/workflows/test-oblt-cli-undeploy-my-kibana.yml b/.github/workflows/test-oblt-cli-undeploy-my-kibana.yml new file mode 100644 index 0000000..b332b8d --- /dev/null +++ b/.github/workflows/test-oblt-cli-undeploy-my-kibana.yml @@ -0,0 +1,69 @@ +name: test-undeploy-my-kibana + +on: + pull_request: + branches: + - main + paths: + - '.github/workflows/test-undeploy-my-kibana.yml' + - 'oblt-cli/undeploy-my-kibana/**' + push: + branches: + - main + paths: + - '.github/workflows/test-undeploy-my-kibana.yml' + - 'oblt-cli/undeploy-my-kibana/**' + +permissions: + contents: read + +jobs: + undeploy-my-kibana: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: ./oblt-cli/undeploy-my-kibana + with: + github-app-id: ${{ secrets.OBS_AUTOMATION_APP_ID }} + github-app-private-key: ${{ secrets.OBS_AUTOMATION_APP_PEM }} + pull-request: '187489' + repository: 'elastic/kibana' + + no-parameters: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./oblt-cli/undeploy-my-kibana + id: validation + continue-on-error: true + - name: Assert is failure if no parameters + run: test "${{steps.validation.outcome}}" = "failure" + + all-parameters: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./oblt-cli/undeploy-my-kibana + id: validation + continue-on-error: true + with: + github-app-id: "app" + github-app-private-key: "key" + github-token: "foo" + - name: Assert is failure if all parameters + run: test "${{steps.validation.outcome}}" = "failure" + + test: + if: always() + needs: + - undeploy-my-kibana + - no-parameters + - all-parameters + runs-on: ubuntu-latest + steps: + - id: check + uses: elastic/oblt-actions/check-dependent-jobs@v1 + with: + jobs: ${{ toJSON(needs) }} + - run: ${{ steps.check.outputs.is-success }} diff --git a/oblt-cli/undeploy-my-kibana/README.md b/oblt-cli/undeploy-my-kibana/README.md new file mode 100644 index 0000000..7cd6ee7 --- /dev/null +++ b/oblt-cli/undeploy-my-kibana/README.md @@ -0,0 +1,50 @@ +# oblt-cli/undeploy-my-kibana + +[![usages](https://img.shields.io/badge/usages-white?logo=githubactions&logoColor=blue)](https://github.com/search?q=elastic%2Foblt-actions%2Foblt-cli%2Fundeploy-my-kibana+%28path%3A.github%2Fworkflows+OR+path%3A**%2Faction.yml+OR+path%3A**%2Faction.yaml%29&type=code) +[![test-oblt-cli-cluster-name-validation](https://github.com/elastic/oblt-actions/actions/workflows/test-oblt-cli-undeploy-my-kibana.yml/badge.svg?branch=main)](https://github.com/elastic/oblt-actions/actions/workflows/test-oblt-cli-undeploy-my-kibana.yml) + + +Undeploy my kibana given the Pull Request + + +## Inputs + +| Name | Description | Required | Default | +|--------------------------|-------------------------------------------------------------|----------|-------------------------------------------| +| `pull-request` | The GitHub Pull Request ID | `false` | `${{ github.event.pull_request.number }}` | +| `repository` | The GitHub repository | `false` | `${{ github.repository }}` | +| `github-token` | The GitHub Personal Access Token. | `false` | ` ` | +| `github-app-id` | The GitHub App ID to generate the ephemeral token. | `false` | ` ` | +| `github-app-private-key` | The GitHub App Private Key to generate the ephemeral token. | `false` | ` ` | + + +## Outputs + +| Name | Description | +|---------|---------------------------------------------------------------| +| `issue` | The GitHub issue that has been created to destroy the cluster | + + +## Usage + +```yaml +name: undeploy-my-kibana + +on: + pull_request_target: + types: [closed] + +permissions: + contents: read + +jobs: + undeploy-my-kibana: + if: contains(github.event.pull_request.labels.*.name, 'ci:deploy-observability') + runs-on: ubuntu-latest + steps: + - uses: elastic/oblt-actions/oblt-cli/undeploy-my-kibana@v1 + with: + github-token: ${{ secrets.PAT_TOKEN }} + +``` + diff --git a/oblt-cli/undeploy-my-kibana/action.yml b/oblt-cli/undeploy-my-kibana/action.yml new file mode 100644 index 0000000..833fc70 --- /dev/null +++ b/oblt-cli/undeploy-my-kibana/action.yml @@ -0,0 +1,90 @@ +name: 'oblt-cli/undeploy-my-kibana' +description: 'Undeploy my kibana given the Pull Request' +inputs: + pull-request: + description: 'The GitHub Pull Request ID' + default: ${{ github.event.pull_request.number }} + repository: + description: 'The GitHub repository' + default: ${{ github.repository }} + github-token: + description: 'The GitHub Personal Access Token.' + required: false + github-app-id: + description: 'The GitHub App ID to generate the ephemeral token.' + required: false + github-app-private-key: + description: 'The GitHub App Private Key to generate the ephemeral token.' + required: false + +outputs: + issue: + description: 'The GitHub issue that has been created to destroy the cluster' + value: ${{ steps.undeploy-my-kibana.outputs.issue }} + +runs: + using: "composite" + steps: + + - if: ${{ (inputs.github-token == '' && inputs.github-app-id == '' && inputs.github-app-private-key == '') || (inputs.github-token != '' && inputs.github-app-id != '' && inputs.github-app-private-key != '') }} + name: Validate input parameters + run: echo "use either github-token or github-app-id and github-app-private-key" && exit 1 + shell: bash + + - name: Get token + if: ${{ inputs.github-token == '' }} + id: get_token + uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a # v2.1.0 + with: + app_id: ${{ inputs.github-app-id }} + private_key: ${{ inputs.github-app-private-key }} + permissions: >- + { + "contents": "read", + "issues": "write" + } + repositories: >- + ["observability-test-environments"] + + - if: ${{ inputs.github-token == '' }} + name: If ephemeral GitHub token app generated + run: echo "GH_TOKEN=${{ steps.get_token.outputs.token }}" >> "$GITHUB_ENV" + shell: bash + + - if: ${{ inputs.github-token != '' }} + name: If GitHub token provided + run: echo "GH_TOKEN=${{ inputs.github-token }}" >> "$GITHUB_ENV" + shell: bash + + - name: Gather PR Owner + run: |- + PR_AUTHOR=$(gh pr view ${{ inputs.pull-request }} --repo ${{ inputs.repository }} --json author --jq .author.login) + echo "PR_AUTHOR=${PR_AUTHOR}" >> $GITHUB_ENV + shell: bash + + - name: Create GitHub issue body + id: undeploy-my-kibana + run: |- + cat <> .body-content + ### Kibana pull request + + ${{ env.PR }} + + ### Further details + + Caused by @${{ env.PR_AUTHOR }} in https://github.com/${{ env.REPO }}/pull/${{ env.PR }} via this [GitHub workflow build](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}) + EOT + + gh issue \ + create \ + --label 'destroy-custom-kibana-serverless' \ + --title "[Undeploy Kibana] ${{ env.REPO }}@pr-${{ env.PR }}" \ + --body-file .body-content \ + --repo elastic/observability-test-environments | tee .issue + echo "issue=$(cat .issue)" >> "$GITHUB_OUTPUT" + + rm .issue .body-content || true + env: + PR: ${{ inputs.pull-request }} + REPO: ${{ inputs.repository }} + shell: bash