Openstatus www.openstatus.dev

✍️ blog post github action (#1202)

* ✍️ blog post github action

* fix build

* 🖊️ improve content

authored by

Thibault Le Ouay and committed by
GitHub
89c65e47 eace19eb

+238 -86
+1 -1
apps/web/package.json
··· 60 60 "feed": "^4.2.2", 61 61 "lucide-react": "0.468.0", 62 62 "nanoid": "5.0.7", 63 - "next": "15.1.1", 63 + "next": "15.1.7", 64 64 "next-auth": "5.0.0-beta.25", 65 65 "next-plausible": "3.12.4", 66 66 "next-themes": "0.2.1",
apps/web/public/assets/posts/how-we-build-our-github-action/GitHub.png

This is a binary file and will not be displayed.

+152
apps/web/src/content/posts/how-we-build-our-github-action.mdx
··· 1 + --- 2 + title: How We Built our own GitHub Action 3 + description: 4 + A speedrun on building our own custom Docker GitHub Action to run OpenStatus Synthetics Tests on every push to our main branch and on a schedule. 5 + author: 6 + name: Thibault Le Ouay Ducasse 7 + url: https://bsky.app/profile/thibaultleouay.dev 8 + avatar: /assets/authors/thibault.jpeg 9 + publishedAt: 2025-02-26 10 + image: /assets/posts/how-we-build-our-github-action/GitHub.png 11 + tag: engineering 12 + --- 13 + 14 + A couple of weeks ago, when we released our CLI, we wanted to use it to run our own Synthetics Tests in a GitHub Action. We aimed to have a simple way to run our tests on every push to our main branch or on a schedule. 15 + 16 + There are three ways to build a GitHub Action: 17 + 18 + - Composite actions 19 + - Javascript actions 20 + - Docker container actions 21 + 22 + 23 + Our CLI is built in Golang, and we publish every new version as a binary. It made sense to go with the Docker container actions. 24 + This way we could use our CLI to run the tests. 25 + 26 + We needed to have a way to pass the API key and the configuration file to the action. 27 + 28 + 29 + Let's start our speedrun on building our own custom Docker GitHub Action. 30 + 31 + ### Create a Dockerfile 32 + 33 + Our Docker file is pretty simple. We use the alpine image and install curl to download the CLI. We then extract the CLI and set the entrypoint to the entrypoint.sh file. 34 + 35 + 36 + ```Dockerfile 37 + FROM alpine:3.21.3 38 + 39 + RUN apk --no-cache add curl 40 + 41 + WORKDIR /home/openstatus 42 + 43 + COPY entrypoint.sh . 44 + 45 + RUN curl -o cli.tar.gz -L https://github.com/openstatusHQ/cli/releases/latest/download/cli_Linux_x86_64.tar.gz 46 + 47 + RUN tar -xf ./cli.tar.gz 48 + 49 + ENTRYPOINT ["/home/openstatus/entrypoint.sh"] 50 + ``` 51 + 52 + It results in a small image of around 25 MB, which is perfect for a GitHub Action. 53 + 54 + To download the latest version of the CLI we use the following URL. 55 + 56 + ``` 57 + https://github.com/openstatusHQ/cli/releases/latest/download/cli_Linux_x86_64.tar.gz 58 + ``` 59 + 60 + 61 + Our entrypoint.sh file is also quite simple. We just run the CLI with the API key and the configuration file. 62 + 63 + ```bash 64 + #!/bin/sh 65 + 66 + if [ -z "$INPUT_CONFIG_PATH" ]; then 67 + /home/openstatus/openstatus run --access-token $INPUT_API_KEY 68 + else 69 + /home/openstatus/openstatus run --access-token $INPUT_API_KEY --config $INPUT_CONFIG_PATH 70 + fi 71 + 72 + if [ $? -eq 0 ] 73 + then 74 + echo "OpenStatus run successfully" 75 + exit 0 76 + else 77 + echo "OpenStatus run failed" 78 + exit 1 79 + fi 80 + ``` 81 + 82 + ### Create the action.yml file 83 + 84 + Our action.yml file 85 + 86 + ```yaml 87 + name: 'OpenStatus Synthetics CI' 88 + description: 'Run your OpenStatus synthetics checks as part of your GitHub Actions workflow.' 89 + author: 'OpenStatus' 90 + branding: 91 + icon: 'zap' 92 + color: gray-dark 93 + 94 + inputs: 95 + api_key: 96 + description: 'OpenStatus API key' 97 + required: true 98 + config_path: 99 + description: 'Path to the OpenStatus configuration file' 100 + required: false 101 + 102 + runs: 103 + using: docker 104 + image: docker://ghcr.io/openstatushq/action:latest 105 + args: 106 + - ${{ inputs.api_key }} 107 + - ${{ inputs.config_path }} 108 + ``` 109 + 110 + That's all you need to build your own Docker custom GitHub Action. 111 + 112 + 113 + 114 + I struggle a bit with the GitHub action because the docker image was being built on the fly. 115 + I had to push the image to the GitHub Container Registry to be able to use it in the action. You can use any other container registry but GitHub Container Registry is free for public repositories. 116 + 117 + The solution was to change the image in the action.yml file to the image in the GitHub Container Registry. 118 + 119 + From: 120 + 121 + ```yaml 122 + image: Dockerfile 123 + ``` 124 + To: 125 + ```yaml 126 + image: docker://ghcr.io/openstatushq/action:latest 127 + ``` 128 + 129 + ### Publish it to the GitHub marketplace 130 + 131 + Add branding to your action and your action is ready. You can publish it to the GitHub Marketplace. 132 + 133 + 134 + ### Conclusion 135 + 136 + Building a GitHub Action is pretty simple. We choose to use a Docker container action because we wanted to use our CLI to run the tests. 137 + 138 + 139 + 140 + If you want to start using our action you can find it in the GitHub Marketplace. 141 + 142 + [https://github.com/marketplace/actions/openstatus-synthetics-ci](https://github.com/marketplace/actions/openstatus-synthetics-ci 143 + ) 144 + 145 + 146 + If you want to see a GitHub repository with the action you can find it here. 147 + 148 + [https://github.com/openstatusHQ/github-action-tester/actions](https://github.com/openstatusHQ/github-action-tester/actions 149 + ) 150 + 151 + 152 + _Create an account on [OpenStatus](/app/sign-in?ref=blog-github-action) and start running your own Synthetics Tests in your GitHub Actions._
+1 -1
packages/api/package.json
··· 18 18 "@trpc/server": "11.0.0-rc.553", 19 19 "nanoid": "5.0.7", 20 20 "nanoid-dictionary": "5.0.0-beta.1", 21 - "next": "15.1.1", 21 + "next": "15.1.7", 22 22 "random-word-slugs": "0.1.7", 23 23 "stripe": "13.8.0", 24 24 "superjson": "1.13.3",
+1 -1
packages/ui/package.json
··· 51 51 "date-fns": "2.30.0", 52 52 "lucide-react": "0.468.0", 53 53 "luxon": "3.5.0", 54 - "next": "15.1.1", 54 + "next": "15.1.7", 55 55 "react": "19.0.0", 56 56 "react-day-picker": "8.10.1", 57 57 "react-hook-form": "7.54.1",
+83 -83
pnpm-lock.yaml
··· 286 286 version: 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 287 287 '@sentry/nextjs': 288 288 specifier: 8.46.0 289 - version: 8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.21.5)) 289 + version: 8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.21.5)) 290 290 '@stripe/stripe-js': 291 291 specifier: 2.1.6 292 292 version: 2.1.6 ··· 313 313 version: 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2) 314 314 '@trpc/next': 315 315 specifier: 11.0.0-rc.666 316 - version: 11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2) 316 + version: 11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2) 317 317 '@trpc/react-query': 318 318 specifier: 11.0.0-rc.666 319 319 version: 11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2) ··· 360 360 specifier: 5.0.7 361 361 version: 5.0.7 362 362 next: 363 - specifier: 15.1.1 364 - version: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 363 + specifier: 15.1.7 364 + version: 15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 365 365 next-auth: 366 366 specifier: 5.0.0-beta.25 367 - version: 5.0.0-beta.25(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 367 + version: 5.0.0-beta.25(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 368 368 next-plausible: 369 369 specifier: 3.12.4 370 - version: 3.12.4(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 370 + version: 3.12.4(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 371 371 next-themes: 372 372 specifier: 0.2.1 373 - version: 0.2.1(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 373 + version: 0.2.1(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 374 374 nuqs: 375 375 specifier: 2.2.3 376 - version: 2.2.3(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 376 + version: 2.2.3(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 377 377 random-word-slugs: 378 378 specifier: 0.1.7 379 379 version: 0.1.7 ··· 443 443 version: 0.2.0(@content-collections/core@0.7.3(typescript@5.6.2))(acorn@8.14.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 444 444 '@content-collections/next': 445 445 specifier: 0.2.4 446 - version: 0.2.4(@content-collections/core@0.7.3(typescript@5.6.2))(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) 446 + version: 0.2.4(@content-collections/core@0.7.3(typescript@5.6.2))(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) 447 447 '@openstatus/tsconfig': 448 448 specifier: workspace:* 449 449 version: link:../../packages/tsconfig ··· 570 570 specifier: 5.0.0-beta.1 571 571 version: 5.0.0-beta.1 572 572 next: 573 - specifier: 15.1.1 574 - version: 15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 573 + specifier: 15.1.7 574 + version: 15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 575 575 random-word-slugs: 576 576 specifier: 0.1.7 577 577 version: 0.1.7 ··· 652 652 version: 0.1.13 653 653 next-auth: 654 654 specifier: 5.0.0-beta.25 655 - version: 5.0.0-beta.25(next@15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 655 + version: 5.0.0-beta.25(next@15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 656 656 typescript: 657 657 specifier: 5.6.2 658 658 version: 5.6.2 ··· 1072 1072 specifier: 3.5.0 1073 1073 version: 3.5.0 1074 1074 next: 1075 - specifier: 15.1.1 1076 - version: 15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 1075 + specifier: 15.1.7 1076 + version: 15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 1077 1077 next-themes: 1078 1078 specifier: 0.2.1 1079 - version: 0.2.1(next@15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 1079 + version: 0.2.1(next@15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 1080 1080 react: 1081 1081 specifier: 19.0.0 1082 1082 version: 19.0.0 ··· 2915 2915 '@next/env@15.0.4': 2916 2916 resolution: {integrity: sha512-WNRvtgnRVDD4oM8gbUcRc27IAhaL4eXQ/2ovGbgLnPGUvdyDr8UdXP4Q/IBDdAdojnD2eScryIDirv0YUCjUVw==} 2917 2917 2918 - '@next/env@15.1.1': 2919 - resolution: {integrity: sha512-ldU8IpUqxa87LsWyMh8eIqAzejt8+ZuEsdtCV+fpDog++cBO5b/PWaI7wQQwun8LKJeFFpnY4kv/6r+/dCON6A==} 2918 + '@next/env@15.1.7': 2919 + resolution: {integrity: sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==} 2920 2920 2921 2921 '@next/swc-darwin-arm64@15.0.4': 2922 2922 resolution: {integrity: sha512-QecQXPD0yRHxSXWL5Ff80nD+A56sUXZG9koUsjWJwA2Z0ZgVQfuy7gd0/otjxoOovPVHR2eVEvPMHbtZP+pf9w==} ··· 2924 2924 cpu: [arm64] 2925 2925 os: [darwin] 2926 2926 2927 - '@next/swc-darwin-arm64@15.1.1': 2928 - resolution: {integrity: sha512-pq7Hzu0KaaH6UYcCQ22mOuj2mWCD6iqGvYprp/Ep1EcCxbdNOSS+8EJADFbPHsaXLkaonIJ8lTKBGWXaFxkeNQ==} 2927 + '@next/swc-darwin-arm64@15.1.7': 2928 + resolution: {integrity: sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==} 2929 2929 engines: {node: '>= 10'} 2930 2930 cpu: [arm64] 2931 2931 os: [darwin] ··· 2936 2936 cpu: [x64] 2937 2937 os: [darwin] 2938 2938 2939 - '@next/swc-darwin-x64@15.1.1': 2940 - resolution: {integrity: sha512-h567/b/AHAnMpaJ1D3l3jKLrzNOgN9bmDSRd+Gb0hXTkLZh8mE0Kd9MbIw39QeTZQJ3192uFRFWlDjWiifwVhQ==} 2939 + '@next/swc-darwin-x64@15.1.7': 2940 + resolution: {integrity: sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==} 2941 2941 engines: {node: '>= 10'} 2942 2942 cpu: [x64] 2943 2943 os: [darwin] ··· 2948 2948 cpu: [arm64] 2949 2949 os: [linux] 2950 2950 2951 - '@next/swc-linux-arm64-gnu@15.1.1': 2952 - resolution: {integrity: sha512-I5Q6M3T9jzTUM2JlwTBy/VBSX+YCDvPLnSaJX5wE5GEPeaJkipMkvTA9+IiFK5PG5ljXTqVFVUj5BSHiYLCpoQ==} 2951 + '@next/swc-linux-arm64-gnu@15.1.7': 2952 + resolution: {integrity: sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==} 2953 2953 engines: {node: '>= 10'} 2954 2954 cpu: [arm64] 2955 2955 os: [linux] ··· 2960 2960 cpu: [arm64] 2961 2961 os: [linux] 2962 2962 2963 - '@next/swc-linux-arm64-musl@15.1.1': 2964 - resolution: {integrity: sha512-4cPMSYmyXlOAk8U04ouEACEGnOwYM9uJOXZnm9GBXIKRbNEvBOH9OePhHiDWqOws6iaHvGayaKr+76LmM41yJA==} 2963 + '@next/swc-linux-arm64-musl@15.1.7': 2964 + resolution: {integrity: sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==} 2965 2965 engines: {node: '>= 10'} 2966 2966 cpu: [arm64] 2967 2967 os: [linux] ··· 2972 2972 cpu: [x64] 2973 2973 os: [linux] 2974 2974 2975 - '@next/swc-linux-x64-gnu@15.1.1': 2976 - resolution: {integrity: sha512-KgIiKDdV35KwL9TrTxPFGsPb3J5RuDpw828z3MwMQbWaOmpp/T4MeWQCwo+J2aOxsyAcfsNE334kaWXCb6YTTA==} 2975 + '@next/swc-linux-x64-gnu@15.1.7': 2976 + resolution: {integrity: sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==} 2977 2977 engines: {node: '>= 10'} 2978 2978 cpu: [x64] 2979 2979 os: [linux] ··· 2984 2984 cpu: [x64] 2985 2985 os: [linux] 2986 2986 2987 - '@next/swc-linux-x64-musl@15.1.1': 2988 - resolution: {integrity: sha512-aHP/29x8loFhB3WuW2YaWaYFJN389t6/SBsug19aNwH+PRLzDEQfCvtuP6NxRCido9OAoExd+ZuYJKF9my1Kpg==} 2987 + '@next/swc-linux-x64-musl@15.1.7': 2988 + resolution: {integrity: sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==} 2989 2989 engines: {node: '>= 10'} 2990 2990 cpu: [x64] 2991 2991 os: [linux] ··· 2996 2996 cpu: [arm64] 2997 2997 os: [win32] 2998 2998 2999 - '@next/swc-win32-arm64-msvc@15.1.1': 3000 - resolution: {integrity: sha512-klbzXYwqHMwiucNFF0tWiWJyPb45MBX1q/ATmxrMjEYgA+V/0OXc9KmNVRIn6G/ab0ASUk4uWqxik5m6wvm1sg==} 2999 + '@next/swc-win32-arm64-msvc@15.1.7': 3000 + resolution: {integrity: sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==} 3001 3001 engines: {node: '>= 10'} 3002 3002 cpu: [arm64] 3003 3003 os: [win32] ··· 3008 3008 cpu: [x64] 3009 3009 os: [win32] 3010 3010 3011 - '@next/swc-win32-x64-msvc@15.1.1': 3012 - resolution: {integrity: sha512-V5fm4aULqHSlMQt3U1rWAWuwJTFsb6Yh4P8p1kQFoayAF9jAQtjBvHku4zCdrtQuw9u9crPC0FNML00kN4WGhA==} 3011 + '@next/swc-win32-x64-msvc@15.1.7': 3012 + resolution: {integrity: sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==} 3013 3013 engines: {node: '>= 10'} 3014 3014 cpu: [x64] 3015 3015 os: [win32] ··· 8005 8005 sass: 8006 8006 optional: true 8007 8007 8008 - next@15.1.1: 8009 - resolution: {integrity: sha512-SBZlcvdIxajw8//H3uOR1G3iu3jxsra/77m2ulRIxi3m89p+s3ACsoOXR49JEAbaun/DVoRJ9cPKq8eF/oNB5g==} 8008 + next@15.1.7: 8009 + resolution: {integrity: sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==} 8010 8010 engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} 8011 8011 hasBin: true 8012 8012 peerDependencies: ··· 11470 11470 - acorn 11471 11471 - supports-color 11472 11472 11473 - '@content-collections/next@0.2.4(@content-collections/core@0.7.3(typescript@5.6.2))(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))': 11473 + '@content-collections/next@0.2.4(@content-collections/core@0.7.3(typescript@5.6.2))(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))': 11474 11474 dependencies: 11475 11475 '@content-collections/core': 0.7.3(typescript@5.6.2) 11476 11476 '@content-collections/integrations': 0.2.1(@content-collections/core@0.7.3(typescript@5.6.2)) 11477 - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 11477 + next: 15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 11478 11478 11479 11479 '@cspotcode/source-map-support@0.8.1': 11480 11480 dependencies: ··· 12390 12390 12391 12391 '@next/env@15.0.4': {} 12392 12392 12393 - '@next/env@15.1.1': {} 12393 + '@next/env@15.1.7': {} 12394 12394 12395 12395 '@next/swc-darwin-arm64@15.0.4': 12396 12396 optional: true 12397 12397 12398 - '@next/swc-darwin-arm64@15.1.1': 12398 + '@next/swc-darwin-arm64@15.1.7': 12399 12399 optional: true 12400 12400 12401 12401 '@next/swc-darwin-x64@15.0.4': 12402 12402 optional: true 12403 12403 12404 - '@next/swc-darwin-x64@15.1.1': 12404 + '@next/swc-darwin-x64@15.1.7': 12405 12405 optional: true 12406 12406 12407 12407 '@next/swc-linux-arm64-gnu@15.0.4': 12408 12408 optional: true 12409 12409 12410 - '@next/swc-linux-arm64-gnu@15.1.1': 12410 + '@next/swc-linux-arm64-gnu@15.1.7': 12411 12411 optional: true 12412 12412 12413 12413 '@next/swc-linux-arm64-musl@15.0.4': 12414 12414 optional: true 12415 12415 12416 - '@next/swc-linux-arm64-musl@15.1.1': 12416 + '@next/swc-linux-arm64-musl@15.1.7': 12417 12417 optional: true 12418 12418 12419 12419 '@next/swc-linux-x64-gnu@15.0.4': 12420 12420 optional: true 12421 12421 12422 - '@next/swc-linux-x64-gnu@15.1.1': 12422 + '@next/swc-linux-x64-gnu@15.1.7': 12423 12423 optional: true 12424 12424 12425 12425 '@next/swc-linux-x64-musl@15.0.4': 12426 12426 optional: true 12427 12427 12428 - '@next/swc-linux-x64-musl@15.1.1': 12428 + '@next/swc-linux-x64-musl@15.1.7': 12429 12429 optional: true 12430 12430 12431 12431 '@next/swc-win32-arm64-msvc@15.0.4': 12432 12432 optional: true 12433 12433 12434 - '@next/swc-win32-arm64-msvc@15.1.1': 12434 + '@next/swc-win32-arm64-msvc@15.1.7': 12435 12435 optional: true 12436 12436 12437 12437 '@next/swc-win32-x64-msvc@15.0.4': 12438 12438 optional: true 12439 12439 12440 - '@next/swc-win32-x64-msvc@15.1.1': 12440 + '@next/swc-win32-x64-msvc@15.1.7': 12441 12441 optional: true 12442 12442 12443 12443 '@nodelib/fs.scandir@2.1.5': ··· 13999 13999 '@sentry/types': 8.9.2 14000 14000 '@sentry/utils': 8.9.2 14001 14001 14002 - '@sentry/nextjs@8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.21.5))': 14002 + '@sentry/nextjs@8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.21.5))': 14003 14003 dependencies: 14004 14004 '@opentelemetry/api': 1.9.0 14005 14005 '@opentelemetry/semantic-conventions': 1.28.0 ··· 14012 14012 '@sentry/vercel-edge': 8.46.0 14013 14013 '@sentry/webpack-plugin': 2.22.7(encoding@0.1.13)(webpack@5.97.1(esbuild@0.21.5)) 14014 14014 chalk: 3.0.0 14015 - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 14015 + next: 15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 14016 14016 resolve: 1.22.8 14017 14017 rollup: 3.29.5 14018 14018 stacktrace-parser: 0.1.10 ··· 14640 14640 '@trpc/server': 11.0.0-rc.666(typescript@5.6.2) 14641 14641 typescript: 5.6.2 14642 14642 14643 - '@trpc/next@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2)': 14643 + '@trpc/next@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2)': 14644 14644 dependencies: 14645 14645 '@trpc/client': 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2) 14646 14646 '@trpc/server': 11.0.0-rc.666(typescript@5.6.2) 14647 - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 14647 + next: 15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 14648 14648 react: 19.0.0 14649 14649 react-dom: 19.0.0(react@19.0.0) 14650 14650 typescript: 5.6.2 ··· 18648 18648 18649 18649 netmask@2.0.2: {} 18650 18650 18651 - next-auth@5.0.0-beta.25(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 18651 + next-auth@5.0.0-beta.25(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 18652 18652 dependencies: 18653 18653 '@auth/core': 0.37.2 18654 - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18654 + next: 15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18655 18655 react: 19.0.0 18656 18656 18657 - next-auth@5.0.0-beta.25(next@15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 18657 + next-auth@5.0.0-beta.25(next@15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 18658 18658 dependencies: 18659 18659 '@auth/core': 0.37.2 18660 - next: 15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18660 + next: 15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18661 18661 react: 19.0.0 18662 18662 18663 - next-plausible@3.12.4(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18663 + next-plausible@3.12.4(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18664 18664 dependencies: 18665 - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18665 + next: 15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18666 18666 react: 19.0.0 18667 18667 react-dom: 19.0.0(react@19.0.0) 18668 18668 18669 - next-themes@0.2.1(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18669 + next-themes@0.2.1(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18670 18670 dependencies: 18671 - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18671 + next: 15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18672 18672 react: 19.0.0 18673 18673 react-dom: 19.0.0(react@19.0.0) 18674 18674 18675 - next-themes@0.2.1(next@15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18675 + next-themes@0.2.1(next@15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18676 18676 dependencies: 18677 - next: 15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18677 + next: 15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18678 18678 react: 19.0.0 18679 18679 react-dom: 19.0.0(react@19.0.0) 18680 18680 ··· 18704 18704 - '@babel/core' 18705 18705 - babel-plugin-macros 18706 18706 18707 - next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18707 + next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18708 18708 dependencies: 18709 - '@next/env': 15.1.1 18709 + '@next/env': 15.1.7 18710 18710 '@swc/counter': 0.1.3 18711 18711 '@swc/helpers': 0.5.15 18712 18712 busboy: 1.6.0 ··· 18716 18716 react-dom: 19.0.0(react@19.0.0) 18717 18717 styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) 18718 18718 optionalDependencies: 18719 - '@next/swc-darwin-arm64': 15.1.1 18720 - '@next/swc-darwin-x64': 15.1.1 18721 - '@next/swc-linux-arm64-gnu': 15.1.1 18722 - '@next/swc-linux-arm64-musl': 15.1.1 18723 - '@next/swc-linux-x64-gnu': 15.1.1 18724 - '@next/swc-linux-x64-musl': 15.1.1 18725 - '@next/swc-win32-arm64-msvc': 15.1.1 18726 - '@next/swc-win32-x64-msvc': 15.1.1 18719 + '@next/swc-darwin-arm64': 15.1.7 18720 + '@next/swc-darwin-x64': 15.1.7 18721 + '@next/swc-linux-arm64-gnu': 15.1.7 18722 + '@next/swc-linux-arm64-musl': 15.1.7 18723 + '@next/swc-linux-x64-gnu': 15.1.7 18724 + '@next/swc-linux-x64-musl': 15.1.7 18725 + '@next/swc-win32-arm64-msvc': 15.1.7 18726 + '@next/swc-win32-x64-msvc': 15.1.7 18727 18727 '@opentelemetry/api': 1.9.0 18728 18728 sharp: 0.33.5 18729 18729 transitivePeerDependencies: 18730 18730 - '@babel/core' 18731 18731 - babel-plugin-macros 18732 18732 18733 - next@15.1.1(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18733 + next@15.1.7(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18734 18734 dependencies: 18735 - '@next/env': 15.1.1 18735 + '@next/env': 15.1.7 18736 18736 '@swc/counter': 0.1.3 18737 18737 '@swc/helpers': 0.5.15 18738 18738 busboy: 1.6.0 ··· 18742 18742 react-dom: 19.0.0(react@19.0.0) 18743 18743 styled-jsx: 5.1.6(react@19.0.0) 18744 18744 optionalDependencies: 18745 - '@next/swc-darwin-arm64': 15.1.1 18746 - '@next/swc-darwin-x64': 15.1.1 18747 - '@next/swc-linux-arm64-gnu': 15.1.1 18748 - '@next/swc-linux-arm64-musl': 15.1.1 18749 - '@next/swc-linux-x64-gnu': 15.1.1 18750 - '@next/swc-linux-x64-musl': 15.1.1 18751 - '@next/swc-win32-arm64-msvc': 15.1.1 18752 - '@next/swc-win32-x64-msvc': 15.1.1 18745 + '@next/swc-darwin-arm64': 15.1.7 18746 + '@next/swc-darwin-x64': 15.1.7 18747 + '@next/swc-linux-arm64-gnu': 15.1.7 18748 + '@next/swc-linux-arm64-musl': 15.1.7 18749 + '@next/swc-linux-x64-gnu': 15.1.7 18750 + '@next/swc-linux-x64-musl': 15.1.7 18751 + '@next/swc-win32-arm64-msvc': 15.1.7 18752 + '@next/swc-win32-x64-msvc': 15.1.7 18753 18753 '@opentelemetry/api': 1.9.0 18754 18754 sharp: 0.33.5 18755 18755 transitivePeerDependencies: ··· 18833 18833 dependencies: 18834 18834 boolbase: 1.0.0 18835 18835 18836 - nuqs@2.2.3(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 18836 + nuqs@2.2.3(next@15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 18837 18837 dependencies: 18838 18838 mitt: 3.0.1 18839 18839 react: 19.0.0 18840 18840 optionalDependencies: 18841 - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18841 + next: 15.1.7(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18842 18842 18843 18843 oauth4webapi@2.10.4: {} 18844 18844 ··· 19232 19232 19233 19233 postcss@8.4.31: 19234 19234 dependencies: 19235 - nanoid: 3.3.7 19235 + nanoid: 3.3.8 19236 19236 picocolors: 1.1.1 19237 19237 source-map-js: 1.2.1 19238 19238