diff --git a/.formatter.exs b/.formatter.exs index 56ab8c4db..cce53f36f 100644 --- a/.formatter.exs +++ b/.formatter.exs @@ -11,6 +11,7 @@ locals_without_parens = [ inputs: [ "{lib,test,config,benchmark}/**/*.{ex,exs}", + "scripts/*.exs", "*.exs" ], locals_without_parens: locals_without_parens, diff --git a/.github/actions/close_issue/action.yml b/.github/actions/close_issue/action.yml new file mode 100644 index 000000000..8a25447b2 --- /dev/null +++ b/.github/actions/close_issue/action.yml @@ -0,0 +1,39 @@ +name: 'Close issue when opened' +description: 'Closes a newly opened issue, tags it and puts it in the proper column in Smackore project board.' +inputs: + GITHUB_TOKEN: + description: 'GitHub token' + required: true + ISSUE_URL: + description: 'Issue URL' + required: true + ISSUE_NUMBER: + description: 'Issue number' + required: true + REPOSITORY: + description: 'Repository' + required: true +runs: + using: 'composite' + steps: + - name: Setup Elixir + uses: erlef/setup-beam@v1 + with: + otp-version: '26.1' + elixir-version: '1.15.6' + - name: Checkout code + uses: actions/checkout@v3 + - name: Create ticket and close issue + run: | + gh issue edit $ISSUE_URL --add-project "Smackore" --add-label closed-by-membrane-bot + sleep 10 + export TICKET_ID=$(gh project item-list 19 --owner membraneframework --format json --limit 10000000 | elixir get_ticket_id.exs "$ISSUE_URL" | awk '/TICKET_ID/{print $2}') + gh issue close $ISSUE_URL --comment "Only PRs welcome ;)" --reason "not planned" + sleep 10 + gh project item-edit --id "$TICKET_ID" --field-id PVTSSF_lADOAYE_z84AWEIBzgOGd1k --project-id PVT_kwDOAYE_z84AWEIB --single-select-option-id "fa223107" + env: + GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }} + ISSUE_URL: ${{ inputs.ISSUE_URL }} + ISSUE_NUMBER: ${{ inputs.ISSUE_NUMBER }} + REPOSITORY: ${{ inputs.REPOSITORY }} + shell: bash diff --git a/.github/actions/create_label/action.yml b/.github/actions/create_label/action.yml new file mode 100644 index 000000000..2bbc19cca --- /dev/null +++ b/.github/actions/create_label/action.yml @@ -0,0 +1,14 @@ +name: 'Create label' +description: 'Creates a label closed-by-membrane-bot, if it does not exist.' +inputs: + GITHUB_TOKEN: + description: 'GitHub token' + required: true +runs: + using: 'composite' + steps: + - run: | + gh label create closed-by-membrane-bot --description "Automatically closed by Membrane bot" --color EB3467 || true + env: + GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }} + shell: bash diff --git a/.github/workflows/update-packages-list.yml b/.github/workflows/update-packages-list.yml index 728c9a42c..bbbb0bf7a 100644 --- a/.github/workflows/update-packages-list.yml +++ b/.github/workflows/update-packages-list.yml @@ -18,7 +18,7 @@ jobs: env: GH_TOKEN: ${{ secrets.BOT_TOKEN }} run: | - elixir update_packages_list.exs + elixir scripts/update_packages_list.exs git config user.name 'Membrane Bot' git config user.email 'bot@membrane.stream' git checkout -B auto-update-packages-list diff --git a/scripts/get_ticket_id.exs b/scripts/get_ticket_id.exs new file mode 100644 index 000000000..4172d5b0f --- /dev/null +++ b/scripts/get_ticket_id.exs @@ -0,0 +1,14 @@ +# This script is used by .github/actions/close_issue/action.yml and it shouldn't be used in any other places. + +Mix.install(json: "~> 1.4.1") + +[issue_url] = System.argv() + +:ok = + IO.read(:stdio, :eof) + |> JSON.decode!() + |> Map.get("items") + |> Enum.find(&(&1["content"]["url"] == issue_url)) + |> Map.get("id") + |> then(&"\nTICKET_ID #{&1}\n") + |> IO.puts() diff --git a/update_packages_list.exs b/scripts/update_packages_list.exs similarity index 100% rename from update_packages_list.exs rename to scripts/update_packages_list.exs