-
Notifications
You must be signed in to change notification settings - Fork 1
158 lines (141 loc) · 5.91 KB
/
Copy pathcopilot-setup-steps.yml
File metadata and controls
158 lines (141 loc) · 5.91 KB
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
# GitHub Copilot Setup Steps for qwt
#
# This workflow configures the GitHub Copilot coding agent's environment
# by preinstalling R, Quarto, TinyTeX, and system dependencies.
#
# See: https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/customize-the-agent-environment
#
# This workflow sets up:
# - Quarto CLI for rendering
# - TinyTeX for PDF output
name: "Copilot Setup Steps"
# This workflow has two independent invocation paths:
#
# 1. Copilot agent provisioning: GitHub's Copilot coding agent runs the
# `copilot-setup-steps` job DIRECTLY to build its environment when it
# starts a task. That invocation is NOT governed by the `on:` triggers
# below — so the `paths:` filter does not affect it. The `skip-cp-setup`
# label short-circuits the heavy install (checkout only) in that context,
# so a PR Copilot is working on can opt out of the full setup cost.
# 2. Validation CI: the `on:` triggers below run the workflow as an ordinary
# job, gated to changes of THIS file so we can validate edits to it
# without paying the setup cost on every unrelated PR. The
# `labeled`/`unlabeled` types let toggling the label re-run a validation.
on:
workflow_dispatch:
push:
paths:
- .github/workflows/copilot-setup-steps.yml
pull_request:
types: [opened, synchronize, reopened, labeled, unlabeled]
paths:
- .github/workflows/copilot-setup-steps.yml
jobs:
# The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
copilot-setup-steps:
runs-on: ubuntu-latest
# Set the permissions to the lowest permissions possible needed for your steps.
# Copilot will be given its own token for its operations.
permissions:
contents: read
pull-requests: read # read PR labels for the skip-cp-setup check
# Timeout after 55 minutes (max is 59 for copilot-setup-steps)
timeout-minutes: 55
steps:
# Skip the heavy install when a PR carries the `skip-cp-setup` label
# (e.g. metadata- or workflow-only PRs). Non-PR events always run setup.
- name: Check if setup should be skipped
id: check_label
# Pass the expression result through env (GitHub-recommended) rather
# than interpolating it directly into the shell, to avoid the
# expression-injection anti-pattern in code that downstream books copy.
env:
EVENT_NAME: ${{ github.event_name }}
LABELS_CONTAIN_SKIP: ${{ contains(github.event.pull_request.labels.*.name, 'skip-cp-setup') }}
shell: bash
run: |
if [[ "$EVENT_NAME" != 'pull_request' ]]; then
echo "Not a pull request, running full setup"
echo "skip=false" >> "$GITHUB_OUTPUT"
elif [[ "$LABELS_CONTAIN_SKIP" == 'true' ]]; then
echo "skip-cp-setup label present, skipping setup steps"
echo "skip=true" >> "$GITHUB_OUTPUT"
else
echo "skip-cp-setup label not present, running full setup"
echo "skip=false" >> "$GITHUB_OUTPUT"
fi
# Checkout code - Copilot will do this automatically if we don't,
# but we need it for any repository-specific setup
- name: Checkout code
uses: actions/checkout@v7
with:
submodules: true
# Install system dependencies needed for this project, including:
#
# - C/C++ libraries required by R packages (libcurl, libssl, libxml2, etc.)
# - PDF processing tools (poppler-utils) for working with PDF documents
# - OCR tools (tesseract-ocr) for optical character recognition tasks
# - A computer algebra system (maxima) for symbolic math computations
# - Python pip for additional tooling
- name: Install system dependencies
if: steps.check_label.outputs.skip != 'true'
run: |
sudo apt-get update
sudo apt-get install -y \
libcurl4-openssl-dev \
libssl-dev \
libxml2-dev \
libfontconfig1-dev \
libharfbuzz-dev \
libfribidi-dev \
libfreetype6-dev \
libpng-dev \
libtiff5-dev \
libjpeg-dev \
libglpk-dev \
poppler-utils \
tesseract-ocr \
tesseract-ocr-eng \
maxima \
python3-pip
# Set up pandoc for documentation
- name: Set up Pandoc
if: steps.check_label.outputs.skip != 'true'
uses: r-lib/actions/setup-pandoc@v2
# Set up R using the standard GitHub Actions setup
# Using 'release' to get the latest R version
- name: Set up R
if: steps.check_label.outputs.skip != 'true'
uses: r-lib/actions/setup-r@v2
with:
r-version: 'release'
use-public-rspm: true
# Install R packages needed for linting and Quarto rendering
- name: Install R packages
if: steps.check_label.outputs.skip != 'true'
run: |
install.packages(
c("lintr", "rmarkdown"),
repos = "https://packagemanager.posit.co/cran/__linux__/noble/latest"
)
shell: Rscript {0}
# Set up Quarto - required for rendering the website
- name: Set up Quarto
if: steps.check_label.outputs.skip != 'true'
uses: quarto-dev/quarto-actions/setup@v2
with:
tinytex: true
# Verify development environment is properly configured
- name: Verify development environment
if: steps.check_label.outputs.skip != 'true'
run: |
echo "=== Development Environment Status ==="
# Check R installation
Rscript -e 'cat("R version:", R.version.string, "\n")'
# Verify Quarto is installed and working
echo ""
echo "=== Quarto Status ==="
quarto --version
quarto list tools
echo ""
echo "Development environment setup complete!"