| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| # To learn more about GitHub Actions in Apache Beam check the CI.md | |
| name: Assign Milestone on issue close | |
| on: | |
| issues: | |
| types: [closed] | |
| jobs: | |
| assign-milestone: | |
| if: github.event.issue.state_reason == 'completed' | |
| permissions: | |
| contents: write # Needed to write milestones and write to them | |
| issues: write | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 2 | |
| persist-credentials: false | |
| - uses: actions/github-script@v9 | |
| with: | |
| script: | | |
| const fs = require('fs') | |
| const version = fs.readFileSync('sdks/python/apache_beam/version.py', {encoding: 'utf-8'}) | |
| const versionArray = version.split('.') | |
| const minorVersion = versionArray[versionArray.length-3] | |
| console.log(`Beam fix version: 2.${minorVersion}.0`) | |
| let milestones = await github.rest.issues.listMilestones({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| state: 'open', | |
| }) | |
| let filteredMilestones = milestones.data.filter(m => m.title.indexOf(`2.${minorVersion}.0`) > -1) | |
| if (filteredMilestones.length > 1) { | |
| throw new Exception(`Invalid milestone. More than one milestone exists for 2.${minorVersion}.0`) | |
| } | |
| if (filteredMilestones.length == 0) { | |
| await github.rest.issues.createMilestone({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| title: `2.${minorVersion}.0 Release`, | |
| }); | |
| milestones = await github.rest.issues.listMilestones({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| state: 'open', | |
| }) | |
| filteredMilestones = milestones.data.filter(m => m.title.indexOf(`2.${minorVersion}.0`) > -1) | |
| } | |
| const curMilestone = filteredMilestones[0] | |
| const issue = await github.rest.issues.update({ | |
| issue_number: context.issue.number, | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| milestone: curMilestone.number, | |
| }) | |
| console.log(issue) |