From a1307697890d51e7f831415c5c1128eb997b07cd Mon Sep 17 00:00:00 2001 From: tmigot Date: Sat, 19 Oct 2024 20:31:48 -0400 Subject: [PATCH 1/9] Update Breakage --- .breakage/Project.toml | 3 + .breakage/get_jso_users.jl | 18 ++++++ .github/workflows/Breakage.yml | 113 +++++++++++++++++++-------------- 3 files changed, 86 insertions(+), 48 deletions(-) create mode 100644 .breakage/Project.toml create mode 100644 .breakage/get_jso_users.jl diff --git a/.breakage/Project.toml b/.breakage/Project.toml new file mode 100644 index 0000000..7f17b55 --- /dev/null +++ b/.breakage/Project.toml @@ -0,0 +1,3 @@ +[deps] +GitHub = "bc5e4493-9b4d-5f90-b8aa-2b2bcaad7a26" +PkgDeps = "839e9fc8-855b-5b3c-a3b7-2833d3dd1f59" diff --git a/.breakage/get_jso_users.jl b/.breakage/get_jso_users.jl new file mode 100644 index 0000000..0d87f55 --- /dev/null +++ b/.breakage/get_jso_users.jl @@ -0,0 +1,18 @@ +import GitHub, PkgDeps # both export users() + +length(ARGS) >= 1 || error("specify at least one JSO package as argument") + +jso_repos, _ = GitHub.repos("JuliaSmoothOptimizers") +jso_names = [splitext(x.name)[1] for x ∈ jso_repos] + +name = splitext(ARGS[1])[1] +name ∈ jso_names || error("argument should be one of ", jso_names) + +dependents = String[] +try + global dependents = filter(x -> x ∈ jso_names, PkgDeps.users(name)) +catch e + # package not registered; don't insert into dependents +end + +println(dependents) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index 0a82e18..96f0ea6 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -7,38 +7,56 @@ on: pull_request: jobs: + # Build dynamically the matrix on which the "break" job will run. + # The matrix contains the packages that depend on ${{ env.pkg }}. + # Job "setup_matrix" outputs variable "matrix", which is in turn + # the output of the "getmatrix" step. + # The contents of "matrix" is a JSON description of a matrix used + # in the next step. It has the form + # { + # "pkg": [ + # "PROPACK", + # "LLSModels", + # "FletcherPenaltySolver" + # ] + # } + setup_matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.getmatrix.outputs.matrix }} + env: + pkg: ${{ github.event.repository.name }} + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@v2 + with: + version: 1 + arch: x64 + - id: getmatrix + run: | + julia -e 'using Pkg; Pkg.Registry.add(RegistrySpec(url = "https://github.com/JuliaRegistries/General.git"))' + julia --project=.breakage -e 'using Pkg; Pkg.update(); Pkg.instantiate()' + pkgs=$(julia --project=.breakage .breakage/get_jso_users.jl ${{ env.pkg }}) + vs='["latest", "stable"]' + matrix=$(jq -cn --argjson deps "$pkgs" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') # don't escape quotes like many posts suggest + echo "matrix=$matrix" >> "$GITHUB_OUTPUT" + break: + needs: setup_matrix runs-on: ubuntu-latest strategy: fail-fast: false - matrix: - pkg: [ - "JuliaSmoothOptimizers/ADNLPModels.jl", - "JuliaSmoothOptimizers/AmplNLReader.jl", - "JuliaSmoothOptimizers/CaNNOLeS.jl", - "JuliaSmoothOptimizers/CUTEst.jl", - "JuliaSmoothOptimizers/DCISolver.jl", - "JuliaSmoothOptimizers/JSOSolvers.jl", - "JuliaSmoothOptimizers/LLSModels.jl", - "JuliaSmoothOptimizers/NLPModelsIpopt.jl", - "JuliaSmoothOptimizers/NLPModelsJuMP.jl", - "JuliaSmoothOptimizers/PDENLPModels.jl", - "JuliaSmoothOptimizers/Percival.jl", - "JuliaSmoothOptimizers/QuadraticModels.jl", - "JuliaSmoothOptimizers/SolverBenchmark.jl", - "JuliaSmoothOptimizers/SolverTools.jl" - ] - pkgversion: [latest, stable] + matrix: ${{ fromJSON(needs.setup_matrix.outputs.matrix) }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 # Install Julia - - uses: julia-actions/setup-julia@v1 + - uses: julia-actions/setup-julia@v2 with: version: 1 arch: x64 - - uses: actions/cache@v1 + - uses: actions/cache@v4 env: cache-name: cache-artifacts with: @@ -49,19 +67,16 @@ jobs: ${{ runner.os }}-test- ${{ runner.os }}- - uses: julia-actions/julia-buildpkg@v1 - # Breakage test - - name: 'Breakage of ${{ matrix.pkg }}, ${{ matrix.pkgversion }} version' + - name: "Breakage of ${{ matrix.pkg }}, ${{ matrix.pkgversion }} version" env: - URL: ${{ matrix.pkg }} + PKG: ${{ matrix.pkg }} VERSION: ${{ matrix.pkgversion }} run: | set -v - mkdir -p ./pr - echo "${{ github.event.number }}" > ./pr/NR - git clone https://github.com/$URL - export PKG=$(echo $URL | cut -f2 -d/) - cd $PKG + mkdir -p ./breakage + git clone https://github.com/JuliaSmoothOptimizers/$PKG.jl.git + cd $PKG.jl if [ $VERSION == "stable" ]; then TAG=$(git tag -l "v*" --sort=-creatordate | head -n1) if [ -z "$TAG" ]; then @@ -76,12 +91,15 @@ jobs: julia -e 'using Pkg; PKG, TAG, VERSION = ENV["PKG"], ENV["TAG"], ENV["VERSION"] joburl = joinpath(ENV["GITHUB_SERVER_URL"], ENV["GITHUB_REPOSITORY"], "actions/runs", ENV["GITHUB_RUN_ID"]) - open("../pr/$PKG-$VERSION", "w") do io + open("../breakage/breakage-$PKG-$VERSION", "w") do io try TAG == "no_tag" && error("Not tag for $VERSION") pkg"activate ."; pkg"instantiate"; pkg"dev ../"; + if TAG == "latest" + global TAG = chomp(read(`git rev-parse --short HEAD`, String)) + end pkg"build"; pkg"test"; @@ -94,32 +112,31 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: pr - path: pr/ + name: breakage-${{ matrix.pkg }}-${{ matrix.pkgversion }} + path: breakage/breakage-* upload: needs: break runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: - name: pr - path: pr/ + path: breakage + pattern: breakage-* + merge-multiple: true - - run: ls + - run: ls -R - run: | - cd pr - echo "| Package name | latest | stable |" > MSG - echo "|--|--|--|" >> MSG + cd breakage + echo "| Package name | latest | stable |" > summary.md + echo "|--|--|--|" >> summary.md count=0 - for file in * + for file in breakage-* do - [ "$file" == "NR" ] && continue - [ "$file" == "MSG" ] && continue if [ $count == "0" ]; then - name=$(echo $file | cut -f1 -d-) + name=$(echo $file | cut -f2 -d-) echo -n "| $name | " else echo -n "| " @@ -132,9 +149,9 @@ jobs: echo " |" count=0 fi - done >> MSG + done >> summary.md - - uses: actions/upload-artifact@v4 + - name: PR comment with file + uses: thollander/actions-comment-pull-request@v2 with: - name: pr - path: pr/ + filePath: breakage/summary.md From b6bb97d0465ed0a98746b74331fab846d289a023 Mon Sep 17 00:00:00 2001 From: tmigot Date: Sat, 19 Oct 2024 20:40:20 -0400 Subject: [PATCH 2/9] up registry link --- .github/workflows/Breakage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index 96f0ea6..3089acd 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -34,7 +34,7 @@ jobs: arch: x64 - id: getmatrix run: | - julia -e 'using Pkg; Pkg.Registry.add(RegistrySpec(url = "https://github.com/JuliaRegistries/General.git"))' + julia -e 'using Pkg; Pkg.Registry.add(RegistrySpec(url = \"https://github.com/JuliaRegistries/General.git\"))' julia --project=.breakage -e 'using Pkg; Pkg.update(); Pkg.instantiate()' pkgs=$(julia --project=.breakage .breakage/get_jso_users.jl ${{ env.pkg }}) vs='["latest", "stable"]' From c94546b67e7b34982fc1fec25177d1b3da23ab00 Mon Sep 17 00:00:00 2001 From: tmigot Date: Sat, 19 Oct 2024 20:44:09 -0400 Subject: [PATCH 3/9] go again --- .github/workflows/Breakage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index 3089acd..96f0ea6 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -34,7 +34,7 @@ jobs: arch: x64 - id: getmatrix run: | - julia -e 'using Pkg; Pkg.Registry.add(RegistrySpec(url = \"https://github.com/JuliaRegistries/General.git\"))' + julia -e 'using Pkg; Pkg.Registry.add(RegistrySpec(url = "https://github.com/JuliaRegistries/General.git"))' julia --project=.breakage -e 'using Pkg; Pkg.update(); Pkg.instantiate()' pkgs=$(julia --project=.breakage .breakage/get_jso_users.jl ${{ env.pkg }}) vs='["latest", "stable"]' From bcf4e962d77f293eff9805447c55706797f8f824 Mon Sep 17 00:00:00 2001 From: tmigot Date: Sat, 19 Oct 2024 21:29:37 -0400 Subject: [PATCH 4/9] up script --- .github/workflows/Breakage.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index 96f0ea6..e365ac3 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -67,8 +67,9 @@ jobs: ${{ runner.os }}-test- ${{ runner.os }}- - uses: julia-actions/julia-buildpkg@v1 + # Breakage test - - name: "Breakage of ${{ matrix.pkg }}, ${{ matrix.pkgversion }} version" + - name: 'Breakage of ${{ matrix.pkg }}, ${{ matrix.pkgversion }} version' env: PKG: ${{ matrix.pkg }} VERSION: ${{ matrix.pkgversion }} From 13449210db537d29820b7e96960e81784de0c94c Mon Sep 17 00:00:00 2001 From: tmigot Date: Fri, 1 Nov 2024 11:04:52 -0400 Subject: [PATCH 5/9] handle empty pkgs --- .github/workflows/Breakage.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index e365ac3..33099b2 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -37,6 +37,9 @@ jobs: julia -e 'using Pkg; Pkg.Registry.add(RegistrySpec(url = "https://github.com/JuliaRegistries/General.git"))' julia --project=.breakage -e 'using Pkg; Pkg.update(); Pkg.instantiate()' pkgs=$(julia --project=.breakage .breakage/get_jso_users.jl ${{ env.pkg }}) + if [[ -z "$pkgs" ]]; then + pkgs="[]" + fi vs='["latest", "stable"]' matrix=$(jq -cn --argjson deps "$pkgs" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') # don't escape quotes like many posts suggest echo "matrix=$matrix" >> "$GITHUB_OUTPUT" From dc7851c986680041995b4c1e4bd1904fc7389582 Mon Sep 17 00:00:00 2001 From: tmigot Date: Fri, 1 Nov 2024 12:04:37 -0400 Subject: [PATCH 6/9] new try --- .github/workflows/Breakage.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index 33099b2..320d842 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -37,11 +37,8 @@ jobs: julia -e 'using Pkg; Pkg.Registry.add(RegistrySpec(url = "https://github.com/JuliaRegistries/General.git"))' julia --project=.breakage -e 'using Pkg; Pkg.update(); Pkg.instantiate()' pkgs=$(julia --project=.breakage .breakage/get_jso_users.jl ${{ env.pkg }}) - if [[ -z "$pkgs" ]]; then - pkgs="[]" - fi vs='["latest", "stable"]' - matrix=$(jq -cn --argjson deps "$pkgs" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') # don't escape quotes like many posts suggest + matrix=$(jq -cn --argjson deps "${pkgs:-[]}" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') # don't escape quotes like many posts suggest echo "matrix=$matrix" >> "$GITHUB_OUTPUT" break: From de775478bb342b4c6bcdb3194b905da51fe4cfe4 Mon Sep 17 00:00:00 2001 From: tmigot Date: Fri, 1 Nov 2024 12:09:54 -0400 Subject: [PATCH 7/9] new try --- .github/workflows/Breakage.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index 320d842..9829f1a 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -38,7 +38,13 @@ jobs: julia --project=.breakage -e 'using Pkg; Pkg.update(); Pkg.instantiate()' pkgs=$(julia --project=.breakage .breakage/get_jso_users.jl ${{ env.pkg }}) vs='["latest", "stable"]' - matrix=$(jq -cn --argjson deps "${pkgs:-[]}" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') # don't escape quotes like many posts suggest + # Check if pkgs is empty, and set it to a JSON array if necessary + if [[ -z "$pkgs" ]]; then + pkgs="[]" + else + pkgs=$(echo "$pkgs" | jq -c '.') + fi + matrix=$(jq -cn --argjson deps "$pkgs" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') echo "matrix=$matrix" >> "$GITHUB_OUTPUT" break: From 425389de98a4d375d9597249483c2c6fba46188f Mon Sep 17 00:00:00 2001 From: tmigot Date: Fri, 1 Nov 2024 12:24:49 -0400 Subject: [PATCH 8/9] add early exit --- .github/workflows/Breakage.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index 9829f1a..c133844 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -40,15 +40,15 @@ jobs: vs='["latest", "stable"]' # Check if pkgs is empty, and set it to a JSON array if necessary if [[ -z "$pkgs" ]]; then - pkgs="[]" - else - pkgs=$(echo "$pkgs" | jq -c '.') + echo "No packages found; exiting successfully." + exit 0 fi matrix=$(jq -cn --argjson deps "$pkgs" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') echo "matrix=$matrix" >> "$GITHUB_OUTPUT" break: needs: setup_matrix + if: needs.setup_matrix.result == 'success' && needs.setup_matrix.outputs.matrix != '' runs-on: ubuntu-latest strategy: fail-fast: false @@ -100,7 +100,7 @@ jobs: joburl = joinpath(ENV["GITHUB_SERVER_URL"], ENV["GITHUB_REPOSITORY"], "actions/runs", ENV["GITHUB_RUN_ID"]) open("../breakage/breakage-$PKG-$VERSION", "w") do io try - TAG == "no_tag" && error("Not tag for $VERSION") + TAG == "no_tag" && error("No tag for $VERSION") pkg"activate ."; pkg"instantiate"; pkg"dev ../"; From 3c4824877ef71802409ec1175cab6b6d45e6e516 Mon Sep 17 00:00:00 2001 From: tmigot Date: Fri, 1 Nov 2024 12:35:19 -0400 Subject: [PATCH 9/9] handle empty string array --- .github/workflows/Breakage.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Breakage.yml b/.github/workflows/Breakage.yml index c133844..484ff19 100644 --- a/.github/workflows/Breakage.yml +++ b/.github/workflows/Breakage.yml @@ -39,11 +39,12 @@ jobs: pkgs=$(julia --project=.breakage .breakage/get_jso_users.jl ${{ env.pkg }}) vs='["latest", "stable"]' # Check if pkgs is empty, and set it to a JSON array if necessary - if [[ -z "$pkgs" ]]; then + if [[ -z "$pkgs" || "$pkgs" == "String[]" ]]; then echo "No packages found; exiting successfully." exit 0 fi - matrix=$(jq -cn --argjson deps "$pkgs" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') + vs='["latest", "stable"]' + matrix=$(jq -cn --argjson deps "$pkgs" --argjson vers "$vs" '{pkg: $deps, pkgversion: $vers}') # don't escape quotes like many posts suggest echo "matrix=$matrix" >> "$GITHUB_OUTPUT" break: