|
36 | 36 | native: |
37 | 37 | - added|modified: '**/native/**' |
38 | 38 | workflow: |
39 | | - - added|modified: '.github/workflows/solana-native.yml' |
| 39 | + - added|modified: '.github/workflows/native.yml' |
40 | 40 | - name: Analyze Changes |
41 | 41 | id: analyze |
42 | 42 | run: | |
@@ -97,106 +97,119 @@ jobs: |
97 | 97 | strategy: |
98 | 98 | fail-fast: false |
99 | 99 | matrix: |
100 | | - node-version: [20.x] |
101 | | - solana-version: [1.18.17, stable] |
102 | 100 | index: ${{ fromJson(needs.changes.outputs.matrix) }} |
103 | 101 | name: build-and-test-group-${{ matrix.index }} |
104 | 102 | outputs: |
105 | 103 | failed_projects: ${{ steps.set-failed.outputs.failed_projects }} |
106 | 104 | steps: |
107 | 105 | - uses: actions/checkout@v4 |
108 | | - - name: Use Node.js ${{ matrix.node-version }} |
| 106 | + - name: Use Node.js |
109 | 107 | uses: actions/setup-node@v4 |
110 | 108 | with: |
111 | | - node-version: ${{ matrix.node-version }} |
| 109 | + node-version: 20.x |
112 | 110 | check-latest: true |
113 | | - - uses: heyAyushh/[email protected] |
114 | | - with: |
115 | | - solana-cli-version: ${{ matrix.solana-version }} |
116 | | - - run: | |
117 | | - solana -V |
118 | | - rustc -V |
119 | | - shell: bash |
120 | | - - name: Install pnpm |
121 | | - run: npm install --global pnpm |
122 | | - - name: Build and Test |
123 | | - env: |
124 | | - TOTAL_PROJECTS: ${{ needs.changes.outputs.total_projects }} |
125 | | - PROJECTS_PER_JOB: ${{ env.MIN_PROJECTS_PER_JOB }} |
| 111 | + - name: Setup build environment |
| 112 | + id: setup |
126 | 113 | run: | |
| 114 | + # Create the build and test function |
| 115 | + cat << 'EOF' > build_and_test.sh |
127 | 116 | function build_and_test() { |
128 | 117 | local project=$1 |
129 | | - echo "Building and Testing $project" |
| 118 | + local solana_version=$2 |
| 119 | + echo "Building and Testing $project with Solana $solana_version" |
130 | 120 | cd "$project" || return 1 |
131 | 121 |
|
132 | 122 | # Install dependencies |
133 | 123 | if ! pnpm install --frozen-lockfile; then |
134 | 124 | echo "::error::pnpm install failed for $project" |
135 | | - echo "$project: pnpm install failed" >> $GITHUB_WORKSPACE/failed_projects.txt |
| 125 | + echo "$project: pnpm install failed with $solana_version" >> $GITHUB_WORKSPACE/failed_projects.txt |
136 | 126 | cd - > /dev/null |
137 | 127 | return 1 |
138 | 128 | fi |
139 | 129 |
|
140 | 130 | # Build |
141 | 131 | if ! pnpm build; then |
142 | 132 | echo "::error::build failed for $project" |
143 | | - echo "$project: build failed" >> $GITHUB_WORKSPACE/failed_projects.txt |
| 133 | + echo "$project: build failed with $solana_version" >> $GITHUB_WORKSPACE/failed_projects.txt |
144 | 134 | cd - > /dev/null |
145 | 135 | return 1 |
146 | 136 | fi |
147 | 137 |
|
148 | 138 | # Test |
149 | 139 | if ! pnpm build-and-test; then |
150 | 140 | echo "::error::tests failed for $project" |
151 | | - echo "$project: tests failed" >> $GITHUB_WORKSPACE/failed_projects.txt |
| 141 | + echo "$project: tests failed with $solana_version" >> $GITHUB_WORKSPACE/failed_projects.txt |
152 | 142 | cd - > /dev/null |
153 | 143 | return 1 |
154 | 144 | fi |
155 | 145 |
|
156 | | - echo "Build and tests succeeded for $project." |
| 146 | + echo "Build and tests succeeded for $project with $solana_version version." |
157 | 147 | cd - > /dev/null |
158 | 148 | return 0 |
159 | 149 | } |
160 | 150 |
|
161 | | - # Determine which projects to build in this job |
162 | | - readarray -t all_projects < <(echo '${{ needs.changes.outputs.changed_projects }}' | jq -r '.[]?') |
163 | | - start_index=$(( ${{ matrix.index }} * PROJECTS_PER_JOB )) |
164 | | - end_index=$(( start_index + PROJECTS_PER_JOB )) |
165 | | - end_index=$(( end_index > TOTAL_PROJECTS ? TOTAL_PROJECTS : end_index )) |
| 151 | + function process_projects() { |
| 152 | + local solana_version=$1 |
166 | 153 |
|
167 | | - echo "Projects to build and test in this job" |
168 | | - for i in $(seq $start_index $(( end_index - 1 ))); do |
169 | | - echo "${all_projects[$i]}" |
170 | | - done |
| 154 | + readarray -t all_projects < <(echo '${{ needs.changes.outputs.changed_projects }}' | jq -r '.[]?') |
| 155 | + start_index=$(( ${{ matrix.index }} * ${{ env.MIN_PROJECTS_PER_JOB }} )) |
| 156 | + end_index=$(( start_index + ${{ env.MIN_PROJECTS_PER_JOB }} )) |
| 157 | + end_index=$(( end_index > ${{ needs.changes.outputs.total_projects }} ? ${{ needs.changes.outputs.total_projects }} : end_index )) |
171 | 158 |
|
172 | | - # Build and test projects |
173 | | - failed=false |
174 | | - failed_projects=() |
175 | | - for i in $(seq $start_index $(( end_index - 1 ))); do |
176 | | - echo "::group::Building and testing ${all_projects[$i]}" |
177 | | - if ! build_and_test "${all_projects[$i]}"; then |
178 | | - failed=true |
179 | | - failed_projects+=("${all_projects[$i]}") |
180 | | - fi |
181 | | - echo "::endgroup::" |
182 | | - done |
| 159 | + echo "Projects to build and test in this job" |
| 160 | + for i in $(seq $start_index $(( end_index - 1 ))); do |
| 161 | + echo "${all_projects[$i]}" |
| 162 | + done |
183 | 163 |
|
184 | | - if [[ "$failed" == "true" ]]; then |
185 | | - echo "::group::Failed projects" |
186 | | - cat $GITHUB_WORKSPACE/failed_projects.txt |
187 | | - echo "::endgroup::" |
188 | | - echo "failed_projects=${failed_projects[@]}" >> $GITHUB_OUTPUT |
189 | | - exit 1 |
190 | | - else |
191 | | - echo "failed_projects=" >> $GITHUB_OUTPUT |
192 | | - fi |
| 164 | + failed=false |
| 165 | + for i in $(seq $start_index $(( end_index - 1 ))); do |
| 166 | + echo "::group::Building and testing ${all_projects[$i]}" |
| 167 | + if ! build_and_test "${all_projects[$i]}" "$solana_version"; then |
| 168 | + failed=true |
| 169 | + fi |
| 170 | + echo "::endgroup::" |
| 171 | + done |
| 172 | +
|
| 173 | + return $([ "$failed" = true ] && echo 1 || echo 0) |
| 174 | + } |
| 175 | + EOF |
| 176 | +
|
| 177 | + # Make the script executable |
| 178 | + chmod +x build_and_test.sh |
| 179 | +
|
| 180 | + # Install pnpm |
| 181 | + npm install --global pnpm |
| 182 | + - name: Test with Solana stable |
| 183 | + |
| 184 | + with: |
| 185 | + solana-cli-version: stable |
| 186 | + - name: Build and Test with Stable |
| 187 | + run: | |
| 188 | + source build_and_test.sh |
| 189 | + solana -V |
| 190 | + rustc -V |
| 191 | + process_projects "stable" |
| 192 | + - name: Test with Solana 1.18.17 |
| 193 | + |
| 194 | + with: |
| 195 | + solana-cli-version: 1.18.17 |
| 196 | + - name: Build and Test with 1.18.17 |
| 197 | + run: | |
| 198 | + source build_and_test.sh |
| 199 | + solana -V |
| 200 | + rustc -V |
| 201 | + process_projects "1.18.17" |
193 | 202 |
|
194 | 203 | - name: Set failed projects output |
195 | 204 | id: set-failed |
196 | 205 | if: failure() |
197 | 206 | run: | |
198 | | - failed_projects=$(cat $GITHUB_WORKSPACE/failed_projects.txt | jq -R -s -c 'split("\n")[:-1]') |
199 | | - echo "failed_projects=$failed_projects" >> $GITHUB_OUTPUT |
| 207 | + if [ -f "$GITHUB_WORKSPACE/failed_projects.txt" ]; then |
| 208 | + failed_projects=$(cat $GITHUB_WORKSPACE/failed_projects.txt | jq -R -s -c 'split("\n")[:-1]') |
| 209 | + echo "failed_projects=$failed_projects" >> $GITHUB_OUTPUT |
| 210 | + else |
| 211 | + echo "failed_projects=[]" >> $GITHUB_OUTPUT |
| 212 | + fi |
200 | 213 |
|
201 | 214 | summary: |
202 | 215 | needs: [changes, build-and-test] |
|
0 commit comments