File: sub_package_update.yml

package info (click to toggle)
ndcube 2.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,356 kB
  • sloc: python: 9,335; makefile: 34
file content (163 lines) | stat: -rw-r--r-- 6,031 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# This template is taken from the cruft example code, for further information please see:
# https://cruft.github.io/cruft/#automating-updates-with-github-actions
name: Automatic Update from package template

on:
  # Allow manual runs through the web UI
  workflow_dispatch:
  schedule:
    #        ┌───────── minute (0 - 59)
    #        │ ┌───────── hour (0 - 23)
    #        │ │ ┌───────── day of the month (1 - 31)
    #        │ │ │ ┌───────── month (1 - 12 or JAN-DEC)
    #        │ │ │ │ ┌───────── day of the week (0 - 6 or SUN-SAT)
    - cron: '0 7 * * 1'  # Every Monday at 7am UTC

jobs:
  update:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    strategy:
      fail-fast: true
    steps:
      - uses: actions/checkout@v6

      - uses: actions/setup-python@v6
        with:
          python-version: "3.14"

      - name: Install Cruft
        run: python -m pip install git+https://github.com/Cadair/cruft@patch-p1

      - name: Check if update is available
        continue-on-error: false
        id: check
        run: |
          CHANGES=0
          if [ -f .cruft.json ]; then
            if ! cruft check; then
              CHANGES=1
            fi
          else
            echo "No .cruft.json file"
          fi

          echo "has_changes=$CHANGES" >> "$GITHUB_OUTPUT"

      - name: Run update if available
        id: cruft_update
        if: steps.check.outputs.has_changes == '1'
        run: |
          git config --global user.email "${{ github.actor }}@users.noreply.github.com"
          git config --global user.name "${{ github.actor }}"

          cruft_output=$(cruft update --skip-apply-ask --refresh-private-variables)
          echo $cruft_output
          git restore --staged .

          if [[ "$cruft_output" == *"Failed to cleanly apply the update, there may be merge conflicts."* ]]; then
            echo merge_conflicts=1 >> $GITHUB_OUTPUT
          else
            echo merge_conflicts=0 >> $GITHUB_OUTPUT
          fi

      - name: Check if only .cruft.json is modified
        id: cruft_json
        if: steps.check.outputs.has_changes == '1'
        run: |
          git status --porcelain=1
          if [[ "$(git status --porcelain=1)" == " M .cruft.json" ]]; then
            echo "Only .cruft.json is modified. Exiting workflow early."
            echo "has_changes=0" >> "$GITHUB_OUTPUT"
          else
            echo "has_changes=1" >> "$GITHUB_OUTPUT"
          fi

      - name: Create pull request
        if: steps.cruft_json.outputs.has_changes == '1'
        uses: peter-evans/create-pull-request@v7
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          add-paths: "."
          commit-message: "Automatic package template update"
          branch: "cruft/update"
          delete-branch: true
          draft: ${{ steps.cruft_update.outputs.merge_conflicts == '1' }}
          title: "Updates from the package template"
          labels: |
            No Changelog Entry Needed
            Backport 2.3
          body: |
            This is an autogenerated PR, which will applies the latest changes from the [SunPy Package Template](https://github.com/sunpy/package-template).
            If this pull request has been opened as a draft there are conflicts which need fixing.

            **To run the CI on this pull request you will need to close it and reopen it.**

  report-fail:
    if: failure()
    needs: [update]
    runs-on: ubuntu-latest
    permissions:
      issues: write
    steps:
      - name: Open an issue if workflow fails
        uses: actions/github-script@v7
        with:
          github-token: ${{ github.token }}
          # This script is adapted from https://github.com/scientific-python/issue-from-pytest-log-action
          # Under MIT license (c) Scientific Python Developers
          script: |
            const fs = require('fs');

            // Edit these if needed for your repo
            const variables = {
              owner: context.repo.owner,
              name: context.repo.repo,
              label: "Infrastructure",
              creator: "app/github-actions",
              title: "SunPy Package Template auto-update failed."
            };

            const logs = 'The package update workflow failed.'
            const workflow_url = `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`;
            const issue_body = `[Workflow Run URL](${workflow_url})\n${logs}`;

            const query_string = `repo:${variables.owner}/${variables.name} author:${variables.creator} label:${variables.label} is:open in:title ${variables.title}`;

            // Run GraphQL query against GitHub API to find the most recent open issue used for reporting failures
            const query = `query {
              search(query: "${query_string}", type:ISSUE, first: 1) {
                edges {
                  node {
                    ... on Issue {
                      body
                      id
                      number
                    }
                  }
                }
              }
            }`;

            const result = await github.graphql(query);

            // If no issue is open, create a new issue,
            // else update the body of the existing issue.
            if (result.search.edges.length === 0) {
              github.rest.issues.create({
                owner: variables.owner,
                repo: variables.n   ame,
                body: issue_body,
                title: variables.title,
                labels: [variables.label],
              });
            } else {
              github.rest.issues.update({
                owner: variables.owner,
                repo: variables.name,
                issue_number: result.search.edges[0].node.number,
                body: issue_body
              });
            }