Currently, it would theoretically be possible for an admin to connect
non-internet Resources to the Internet site. This PR fixes that by
enforcing only the `internet` Resource type can belong to the `Internet`
gateway group.
Related: #6834
Sentry uncovered a bug in the resources index liveview where it looks
like some code copy-pasted from the policies index view wasn't updated
properly to work in the resources live view, causing the view to crash
if an admin was viewing the table while the resources are changed in
another page.
In debugging that, I realized the best UX when viewing these tables is
usually just to show a `Reload` button and not update the data live
while the admin is viewing it, as this can cause missed clicks and other
annoyances.
This PR adds an optional `stale` component attribute that, if true, will
render a `Reload` button in the live table which upon clicking will
reload the live table.
Not all index views are updated with this - in some views there is
already logic to handle making an intelligent update without breaking
the view if the data is updated - for example for the clients table.
Ideally, we live-update things that don't reflow layout inline (such as
`online/offline` presence) and for things that do cause layout reflow
(create/delete), we show the `Reload` button.
However that work is saved for a future PR as this one fixes the
immediate bug and this is not the highest priority.
<img width="1195" alt="Screenshot 2025-02-16 at 8 44 43 AM"
src="https://github.com/user-attachments/assets/114efffa-85ea-490d-9cea-78c607081ce3"
/>
<img width="401" alt="Screenshot 2025-02-16 at 9 59 53 AM"
src="https://github.com/user-attachments/assets/8a570213-d4ec-4b6c-a489-dcd9ad1c351c"
/>
It's possible for a client or admin to try and load the redirect URL
directly, or a misconfigured IdP may redirect back to us with missing
params. We should redirect with an error flash instead of 500'ing.
This PR fixes two issues:
1. Since we weren't updating any actual fields in the telemetry reporter
log record, it was never being updated, thus optimistic locking was not
taking effect. To fix this, we use `Repo.update(force: true)`.
2. If a buffer is full, we write immediately, but we provider an empty
`%Log{}` which causes a repetitive `the current value of last_flushed_at
is nil and will not be used as a filter for optimistic locking.`
Some customers have already picked the `Internet` name, which is making
our migrations fail.
This scopes the unique name index by `managed_by` so that our attempts
to create them succeed.
By specifying the `before_send` hook, we can easily drop events based on
their data, such as `original_exception` which contains the original
exception instance raised.
Leveraging this, we can add a `report_to_sentry` parameter to
`Web.LiveErrors.NotFound` to optionally ignore certain not found errors
from going to Sentry.
With the internet site changes now in, editing the Internet Resource is
impossible.
As such, the old instructions for using the Internet Resource no longer
apply, and we need to make sure the Internet Site and Internet Resource
are linked.
This migration ensures that's the case. However, if the internet
resource is currently connected to another site already, we don't move
it. This is only for internet resources that aren't connected to any
sites yet.
When flushing metrics to GCP, we sometimes get the following error:
```
{400, "{\n \"error\": {\n \"code\": 400,\n \"message\": \"One or more TimeSeries could not be written: timeSeries[0-51]: write for resource=gce_instance{zone:us-east1-d,instance_id:6130184649770384727} failed with: One or more points were written more frequently than the maximum sampling period configured for the metric.\",\n \"status\": \"INVALID_ARGUMENT\",\n \"details\": [\n {\n \"@type\": \"type.googleapis.com/google.monitoring.v3.CreateTimeSeriesSummary\",\n \"totalPointCount\": 52,\n \"successPointCount\": 48,\n \"errors\": [\n {\n \"status\": {\n \"code\": 9\n },\n \"pointCount\": 4\n }\n ]\n }\n ]\n }\n}\n"}
```
It would be helpful to know exactly which metrics are failing to flush
so we can further troubleshoot any issues.
This allows connections to the postgresql database via the standard
socket, which - opposed to TCP sockets - allows `peer` authentication
based on local unix users. This removes the need for a password and is
much simpler to deploy when running components locally.
In the current form, `DATABASE_SOCKET_DIR` takes precedence over
hostname, if the environment variable is present. I found that
`compile_config!` somehow enforces a value to be present which is
explicitly not what I want for some of these values (i think). I'd be
glad if anyone with more elixir experience can guide me as to how I can
make this more idiomatic.
---------
Supersedes: #8044
Signed-off-by: Jamil <jamilbk@users.noreply.github.com>
Co-authored-by: oddlama <oddlama@oddlama.org>
Ok, the reason why we're still getting the error `One or more points
were written more frequently than the maximum sampling period configured
for the metric.` is because the metric points are identified by the
labels in the metric, and so are "aggregated" more frequently than our
API calls.
By adding the node name to the labels, we scope the metric by that node
and prevent inserting the points more often than our API calls.
Whenever changing a URL we care about, we add an entry in
`website/redirects.js` to avoid breaking links to the old page. Most
search engines reindex these after 1 year, but other websites and places
won't, so we should generally keep them indefinitely since they don't
cost us much to keep around.
This adds hardening to the relay example systemd service shown in the
admin portal. Instead of running the service as root to download the
relay binary, we can let systemd manage the state directory and run with
lower privileges at all times.
I've also removed a shell injection which would in theory allow a
malicious github api server to run commands as root in the pre start
phase.
That being said I have no idea how this script is intended to function,
since it downloads the relay binary from the latest release on GitHub
which currently is a `gui-client` release without any relay binaries
attached.
We are getting quite a few of these warnings on prod:
```
{400, "{\n \"error\": {\n \"code\": 400,\n \"message\": \"One or more TimeSeries could not be written: timeSeries[0-39]: write for resource=gce_instance{zone:us-east1-d,instance_id:2678918148122610092} failed with: One or more points were written more frequently than the maximum sampling period configured for the metric.\",\n \"status\": \"INVALID_ARGUMENT\",\n \"details\": [\n {\n \"@type\": \"type.googleapis.com/google.monitoring.v3.CreateTimeSeriesSummary\",\n \"totalPointCount\": 40,\n \"successPointCount\": 31,\n \"errors\": [\n {\n \"status\": {\n \"code\": 9\n },\n \"pointCount\": 9\n }\n ]\n }\n ]\n }\n}\n"}
```
Since the point count is _much_ less than our flush buffer size of 1000,
we can only surmise the limit we're hitting is the flush interval.
The telemetry metrics reporter is run on each node, so we run the risk
of violating Google's API limit regardless of what a single node's
`@flush_interval` is set to.
To solve this, we use a new table `telemetry_reporter_logs` that stores
the last time a particular `flush` occurred for a reporter module. This
tracks global state as to when the last flush occurred, and if too
recent, the timer-based flush is call is `no-op`ed until the next one.
**Note**: The buffer-based `flush` is left unchanged, this will always
be called when `buffer_size > max_buffer_size`.
This is required to run multiple components on a single machine (even if
the processes are sandboxed), since they will share a network namespace
and thus cannot bind to the same port.
Currently port `4000` is hardcoded, this PR allows this to be configured
by an environment variable.
---------
Co-authored-by: oddlama <oddlama@oddlama.org>
This is mostly to stay up to date with current Elixir and benefit from
the new included [JSON parser](https://hexdocs.pm/elixir/JSON.html).
Removing `Jason` in favor of the embedded `JSON` parser is saved for a
[future PR](https://github.com/firezone/firezone/issues/8011).
It found a couple type violations which were simple to fix, and some
formatting changes.
It appears that something is initializing the Sentry.LoggerHandler
before we try to load it when starting:
```
Invalid logger handler config: {:logger,
{:invalid_handler, {:function_not_exported, {Sentry.LoggerHandler, :log, 2}}}}
```
This doesn't seem to actually inhibit the Sentry logger at all,
presumably because it initializes just fine in the application start
callback.
Instead of defining the config in the `config/` directory, we can pass
it directly to `:logger` on start which solves the above issue.
On staging (only), we see these logs spammed:
```
{400, "{\n \"error\": {\n \"code\": 400,\n \"message\": \"One or more TimeSeries could not be written: timeSeries[22]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/queue_time/min must be CUMULATIVE, but is GAUGE.; timeSeries[11]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/query_time/max must be CUMULATIVE, but is GAUGE.; timeSeries[8]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/idle_time/max must be CUMULATIVE, but is GAUGE.; timeSeries[7]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/idle_time/min must be CUMULATIVE, but is GAUGE.; timeSeries[10]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/query_time/min must be CUMULATIVE, but is GAUGE.; timeSeries[14]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/query_time/max must be CUMULATIVE, but is GAUGE.; timeSeries[13]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/query_time/min must be CUMULATIVE, but is GAUGE.; timeSeries[16]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/query_time/min must be CUMULATIVE, but is GAUGE.; timeSeries[23]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/queue_time/max must be CUMULATIVE, but is GAUGE.; timeSeries[20]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/query_time/max must be CUMULATIVE, but is GAUGE.; timeSeries[19]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/query_time/min must be CUMULATIVE, but is GAUGE.; timeSeries[17]: Metric kind for metric custom.googleapis.com/elixir/domain/repo/query/query_time/max must be CUMULATIVE, but is GAUGE.\",\n \"status\": \"INVALID_ARGUMENT\",\n \"details\": [\n {\n \"@type\": \"type.googleapis.com/google.monitoring.v3.CreateTimeSeriesSummary\",\n \"totalPointCount\": 36,\n \"successPointCount\": 24,\n \"errors\": [\n {\n \"status\": {\n \"code\": 3\n },\n \"pointCount\": 12\n }\n ]\n }\n ]\n }\n}\n"}
```
This does not happen on prod. As far as I can tell, GCP will cache the
initial metric kind used when the metric ID was first used, which
appears to be `CUMULATIVE` here.
The correct metric kind for these is `GAUGE` since they're reporting a
min/max value.
Since GCP doesn't support resetting the auto-defined metric kind of a
particular metric ID, we need to alter the ID to "bust" the cache and
create a new definition.
The applications within our umbrella are all joined into a single Erlang
cluster, and logger configuration is applied already to the entire
umbrella.
As such, registering the Sentry log handler in each application's
startup routine triggers duplicate handlers to be registered for the
cluster, resulting in warnings like this in GCP:
```
Event dropped due to being a duplicate of a previously-captured event.
```
As such, we can move the log handler configuration to the top-level
`:logger` key, under the `:logger` subkey for configuring a single
handler. We then load this handler config in the `domain` app only and
it applies to the entire cluster.
This adds https://github.com/getsentry/sentry-elixir to the portal for
automatic process crash and exception trace reporting.
It also configures Logger reporting for the `warning` level and higher,
and sets the data scrubbing rules to allow all Logger metadata keys
(`logger_metadata.*` in the Sentry project settings).
Lastly, it configures automatic HTTP error reporting by tying into the
`api` and `web` endpoint modules with a custom `plug` middleware so we
get automatic reporting of unsuccessful Phoenix responses.
It is expected this will be noisy when we first deploy and we'll need to
tune it down a bit. This is the same approach used with other Sentry
platforms.
[//]: # (dependabot-start)
⚠️ **Dependabot is rebasing this PR** ⚠️
Rebasing might not happen immediately, so don't worry if this takes some
time.
Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.
---
[//]: # (dependabot-end)
Bumps [bandit](https://github.com/mtrudel/bandit) from 1.5.7 to 1.6.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/mtrudel/bandit/blob/main/CHANGELOG.md">bandit's
changelog</a>.</em></p>
<blockquote>
<h2>1.6.7 (30 Jan 2025)</h2>
<h3>Changes</h3>
<ul>
<li>Consider timeouts when reading HTTP/1 headers as a connection error
and not an HTTP error</li>
<li>Enhance logging for WebSocket deflation errors</li>
</ul>
<h2>1.6.6 (25 Jan 2025)</h2>
<h3>Fixes</h3>
<ul>
<li>Consider closures during HTTP/1 header reading as a socket error to
silence them by default via <code>log_client_closures</code> config
flag</li>
<li>Send <code>connection: close</code> when closing connection on error
per RFC9112§9.6</li>
</ul>
<h3>Enhancements</h3>
<ul>
<li>Add experimental opt-in trace logging to help diagnose hard to
reproduce errors</li>
<li>Move CI to 1.18 & improve tests (<a
href="https://redirect.github.com/mtrudel/bandit/issues/459">#459</a>,
<a
href="https://redirect.github.com/mtrudel/bandit/issues/461">#461</a>,
thanks <a
href="https://github.com/grzuy"><code>@grzuy</code></a>!)</li>
</ul>
<h2>1.6.5 (15 Jan 2025)</h2>
<h3>Fixes</h3>
<ul>
<li>Fix regression introduced in 1.6.1 where we would not send headers
set by the Plug during WebSocket upgrades (<a
href="https://redirect.github.com/mtrudel/bandit/issues/458">#458</a>)</li>
</ul>
<h3>Enhancements</h3>
<ul>
<li>Properly normalize Erlang errors before emitting telemetry and
logged crash_reason (<a
href="https://redirect.github.com/mtrudel/bandit/issues/455">#455</a>,
thanks <a
href="https://github.com/grzuy"><code>@grzuy</code></a>!)</li>
</ul>
<h2>1.6.4 (11 Jan 2025)</h2>
<h3>Fixes</h3>
<ul>
<li>Fix error in socket setup error handling introduced in 1.6.2 (thanks
<a
href="https://github.com/danielspofford"><code>@danielspofford</code></a>!)</li>
</ul>
<h2>1.6.3 (8 Jan 2025)</h2>
<h3>Fixes</h3>
<ul>
<li>Always close HTTP/1 connection in any case where an error comes out
of the plug (<a
href="https://redirect.github.com/mtrudel/bandit/issues/452">#452</a>,
thanks <a
href="https://github.com/zookzook"><code>@zookzook</code></a>!)</li>
<li>Fix dialyzer warning introduced by Thousand Island 1.3.9</li>
</ul>
<h2>1.6.2 (4 Jan 2025)</h2>
<h3>Enhancements</h3>
<ul>
<li>Send telemetry events on Plugs that throw or exit (<a
href="https://redirect.github.com/mtrudel/bandit/issues/443">#443</a>)</li>
<li>Improve test robustness & speed (<a
href="https://redirect.github.com/mtrudel/bandit/issues/446">#446</a>)</li>
<li>Read a minimal number of bytes when sniffing for protocol (<a
href="https://redirect.github.com/mtrudel/bandit/issues/449">#449</a>)</li>
<li>Add <code>plug</code> and <code>websock</code> to logging metadata
whenever possible (<a
href="https://redirect.github.com/mtrudel/bandit/issues/448">#448</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5879549e6a"><code>5879549</code></a>
Version bump to 1.6.7</li>
<li><a
href="2f55abc702"><code>2f55abc</code></a>
Include details of websocket deflation error</li>
<li><a
href="8f257f1213"><code>8f257f1</code></a>
Consider HTTP/1 header read timeouts as connection errors</li>
<li><a
href="575c396d0b"><code>575c396</code></a>
Version bump to 1.6.6</li>
<li><a
href="137ff68657"><code>137ff68</code></a>
Fixup dialyzer warning under 1.18</li>
<li><a
href="9e6ba262e1"><code>9e6ba26</code></a>
Don't credo test files</li>
<li><a
href="f62faab84a"><code>f62faab</code></a>
Version bump CI to 1.18/27</li>
<li><a
href="a5fcb83590"><code>a5fcb83</code></a>
Minor typo</li>
<li><a
href="5adc828d8c"><code>5adc828</code></a>
Trace tooling (<a
href="https://redirect.github.com/mtrudel/bandit/issues/453">#453</a>)</li>
<li><a
href="bc0a4fdfed"><code>bc0a4fd</code></a>
Use an apply when inducing runtime crashes in order to fool the
increasingly ...</li>
<li>Additional commits viewable in <a
href="https://github.com/mtrudel/bandit/compare/1.5.7...1.6.7">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [tailwind](https://github.com/phoenixframework/tailwind) from
0.2.3 to 0.2.4.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/phoenixframework/tailwind/blob/main/CHANGELOG.md">tailwind's
changelog</a>.</em></p>
<blockquote>
<h2>v0.2.4 (2024-10-18)</h2>
<ul>
<li>Add version check flag</li>
<li>Fallback to ipv4/ipv6 for unreachable hosts</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="194ab0f979"><code>194ab0f</code></a>
Release v0.2.4</li>
<li><a
href="bcc196ae31"><code>bcc196a</code></a>
Release v0.2.3</li>
<li><a
href="f13003fba9"><code>f13003f</code></a>
fallback to ipv4/ipv6 in the event of an unreachable host error (<a
href="https://redirect.github.com/phoenixframework/tailwind/issues/101">#101</a>)</li>
<li><a
href="f729dc3258"><code>f729dc3</code></a>
Add version check flag (<a
href="https://redirect.github.com/phoenixframework/tailwind/issues/100">#100</a>)</li>
<li><a
href="a4133dd2d5"><code>a4133dd</code></a>
Bump changelog</li>
<li><a
href="9b5ca917ba"><code>9b5ca91</code></a>
Fixup</li>
<li><a
href="271d19526e"><code>271d195</code></a>
Merge pull request <a
href="https://redirect.github.com/phoenixframework/tailwind/issues/98">#98</a>
from Gigitsu/hotfix/version-wiht-path</li>
<li><a
href="2b7417e628"><code>2b7417e</code></a>
Don't check version if path is present</li>
<li><a
href="e2d8d3b4db"><code>e2d8d3b</code></a>
Update main.yml</li>
<li><a
href="b8382fbd95"><code>b8382fb</code></a>
Update ExDoc</li>
<li>Additional commits viewable in <a
href="https://github.com/phoenixframework/tailwind/compare/v0.2.3...v0.2.4">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [wallaby](https://github.com/elixir-wallaby/wallaby) from 0.30.9
to 0.30.10.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/elixir-wallaby/wallaby/releases">wallaby's
releases</a>.</em></p>
<blockquote>
<h2>v0.30.10</h2>
<h2>What's Changed</h2>
<ul>
<li>Only spawn a browser when using the <code>feature</code> macro, not
normal <code>test</code>s by <a
href="https://github.com/s3cur3"><code>@s3cur3</code></a> in <a
href="https://redirect.github.com/elixir-wallaby/wallaby/pull/795">elixir-wallaby/wallaby#795</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/elixir-wallaby/wallaby/compare/v0.30.9...v0.30.10">https://github.com/elixir-wallaby/wallaby/compare/v0.30.9...v0.30.10</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/elixir-wallaby/wallaby/blob/main/CHANGELOG.md">wallaby's
changelog</a>.</em></p>
<blockquote>
<h2>v0.30.10</h2>
<ul>
<li>only automatically start sessions for <code>feature</code> test
macros and not every test in a file by <a
href="https://github.com/s3cur3"><code>@s3cur3</code></a> in <a
href="https://redirect.github.com/elixir-wallaby/wallaby/pull/795">elixir-wallaby/wallaby#795</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="70c9e84357"><code>70c9e84</code></a>
chore: bump v0.30.10</li>
<li><a
href="337485e073"><code>337485e</code></a>
chore: update flake.lock</li>
<li><a
href="90c3ca5369"><code>90c3ca5</code></a>
chore: update tool versions</li>
<li><a
href="368cd84506"><code>368cd84</code></a>
docs: add chromedriver issue tracker to readme</li>
<li><a
href="79481d004a"><code>79481d0</code></a>
chore: add flake</li>
<li><a
href="4e87275400"><code>4e87275</code></a>
Only spawn a browser when using the <code>feature</code> macro, not
normal <code>test</code>s (<a
href="https://redirect.github.com/elixir-wallaby/wallaby/issues/795">#795</a>)</li>
<li>See full diff in <a
href="https://github.com/elixir-wallaby/wallaby/compare/v0.30.9...v0.30.10">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [flowbite](https://github.com/themesberg/flowbite) from 2.5.2 to
3.1.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/themesberg/flowbite/releases">flowbite's
releases</a>.</em></p>
<blockquote>
<h2>v3.1.1</h2>
<ul>
<li>fixed CSS variables markup in plugin</li>
</ul>
<h2>v3.1.0</h2>
<ul>
<li>use CSS variables instead of hex codes in plugin</li>
<li>remove setting dark mode via class strategy in plugin</li>
</ul>
<h2>v3.0.0</h2>
<ul>
<li>upgrade to Tailwind v4</li>
<li>refactor and adapt the Flowbite plugin and UI components to the new
deprecated changes from Tailwind v4</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4ba07d7173"><code>4ba07d7</code></a>
push fixed 3.1.1</li>
<li><a
href="284eb580e3"><code>284eb58</code></a>
fix(plugin): css variables</li>
<li><a
href="e8d4ec7ba7"><code>e8d4ec7</code></a>
docs(README): update</li>
<li><a
href="19c48c69d6"><code>19c48c6</code></a>
chore(3.1.0): upgrade to 3.1.0 release</li>
<li><a
href="89bba922ca"><code>89bba92</code></a>
docs(v4): fix typo</li>
<li><a
href="bf10fed156"><code>bf10fed</code></a>
docs(optimization): update optimization file</li>
<li><a
href="05b270938a"><code>05b2709</code></a>
docs(config): finish config page docs</li>
<li><a
href="6698d47ee2"><code>6698d47</code></a>
docs(configuration): add custom utilities docs</li>
<li><a
href="1a437a3b9c"><code>1a437a3</code></a>
docs(configuration): update config settings for Tailwind v4</li>
<li><a
href="672a8153fd"><code>672a815</code></a>
refactor(dark mode): set dark mode via CSS</li>
<li>Additional commits viewable in <a
href="https://github.com/themesberg/flowbite/compare/v2.5.2...v3.1.1">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Add docs related to Google directory sync around why there is a need for
a Google Workspace super admin when setting up directory sync.
---------
Signed-off-by: Brian Manifold <bmanifold@users.noreply.github.com>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
Bumps [credo](https://github.com/rrrene/credo) from 1.7.7 to 1.7.11.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rrrene/credo/releases">credo's
releases</a>.</em></p>
<blockquote>
<h2>v1.7.11</h2>
<p>Check it out on Hex: <a
href="https://hex.pm/packages/credo/1.7.11">https://hex.pm/packages/credo/1.7.11</a></p>
<ul>
<li>Fix compatibility & compiler warnings with Elixir 1.18</li>
<li>Fix crashing for invalid strings in issue messages</li>
<li>Show required Elixir version for skipped checks</li>
<li>Add options <code>:exit_status</code> and <code>:category</code> to
<code>format_issue/2</code> when using <code>Credo.Check</code></li>
<li><code>Credo.Check.Readability.ModuleDoc</code> fixed false
positive</li>
<li><code>Credo.Check.Warning.UnusedEnumOperation</code> fixed false
positive</li>
<li><code>Credo.Check.Refactor.ABCSize</code> fixed false positive for
tuples and underscored matches (<code>_foo</code>)</li>
</ul>
<h2>v1.7.10</h2>
<p>Check it out on Hex: <a
href="https://hex.pm/packages/credo/1.7.10">https://hex.pm/packages/credo/1.7.10</a></p>
<ul>
<li>Maintenance release</li>
</ul>
<h2>v1.7.9</h2>
<p>Check it out on Hex: <a
href="https://hex.pm/packages/credo/1.7.9">https://hex.pm/packages/credo/1.7.9</a></p>
<ul>
<li><code>Credo.Check.Refactor.ABCSize</code> fixed false positive for
pin operator (<code>^</code>)</li>
<li><code>Credo.Check.Readability.FunctionNames</code> fixed false
positive for pow operator (<code>**</code>)</li>
<li>Fixed a bug in <code>Credo.Code.Parameters</code> when couting
parameters for functions with guards</li>
</ul>
<h2>v1.7.8</h2>
<p>Check it out on Hex: <a
href="https://hex.pm/packages/credo/1.7.8">https://hex.pm/packages/credo/1.7.8</a></p>
<ul>
<li><code>Credo.Check.Refactor.Apply</code> fixed false positive</li>
<li><code>Credo.Check.Warning.IoInspect</code> fixed false positive</li>
<li><code>Credo.Check.Warning.UnsafeToAtom</code> fixed false
positive</li>
<li><code>Credo.Check.Readability.FunctionNames</code> fixed false
positive</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rrrene/credo/blob/master/CHANGELOG.md">credo's
changelog</a>.</em></p>
<blockquote>
<h2>1.7.11</h2>
<ul>
<li>Fix compatibility & compiler warnings with Elixir 1.18</li>
<li>Fix crashing for invalid strings in issue messages</li>
<li>Show required Elixir version for skipped checks</li>
<li>Add options <code>:exit_status</code> and <code>:category</code> to
<code>format_issue/2</code> when using <code>Credo.Check</code></li>
<li><code>Credo.Check.Readability.ModuleDoc</code> fixed false
positive</li>
<li><code>Credo.Check.Warning.UnusedEnumOperation</code> fixed false
positive</li>
<li><code>Credo.Check.Refactor.ABCSize</code> fixed false positive for
tuples and underscored matches (<code>_foo</code>)</li>
</ul>
<h2>1.7.10</h2>
<ul>
<li>Maintenance release</li>
</ul>
<h2>1.7.9</h2>
<ul>
<li><code>Credo.Check.Refactor.ABCSize</code> fixed false positive for
pin operator (<code>^</code>)</li>
<li><code>Credo.Check.Readability.FunctionNames</code> fixed false
positive for pow operator (<code>**</code>)</li>
<li>Fixed a bug in <code>Credo.Code.Parameters</code> when couting
parameters for functions with guards</li>
</ul>
<h2>1.7.8</h2>
<ul>
<li><code>Credo.Check.Refactor.Apply</code> fixed false positive</li>
<li><code>Credo.Check.Warning.IoInspect</code> fixed false positive</li>
<li><code>Credo.Check.Warning.UnsafeToAtom</code> fixed false
positive</li>
<li><code>Credo.Check.Readability.FunctionNames</code> fixed false
positive</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="965a59c0e7"><code>965a59c</code></a>
Bump version to 1.7.11</li>
<li><a
href="92a6814df9"><code>92a6814</code></a>
Update CHANGELOG</li>
<li><a
href="7482d13367"><code>7482d13</code></a>
Update GitHub actions</li>
<li><a
href="b02c29220d"><code>b02c292</code></a>
Update to Elixir 1.18.1</li>
<li><a
href="e69dc29f41"><code>e69dc29</code></a>
Merge pull request <a
href="https://redirect.github.com/rrrene/credo/issues/1166">#1166</a>
from Wigny/wigny/add-unusedvariablenames-checks</li>
<li><a
href="dd666fa331"><code>dd666fa</code></a>
Update GitHub actions</li>
<li><a
href="b8cdedc797"><code>b8cdedc</code></a>
Upgrade Elixir to 1.18 on CI etc.</li>
<li><a
href="1f5ae9e2dd"><code>1f5ae9e</code></a>
Merge pull request <a
href="https://redirect.github.com/rrrene/credo/issues/1165">#1165</a>
from rNoz/rnoz/check-format-issue-category</li>
<li><a
href="91350ade08"><code>91350ad</code></a>
Update deps for Elixir 1.18</li>
<li><a
href="327413252b"><code>3274132</code></a>
Check for invalid bytes in issue message</li>
<li>Additional commits viewable in <a
href="https://github.com/rrrene/credo/compare/v1.7.7...v1.7.11">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [observer_cli](https://github.com/zhongwencool/observer_cli) from
1.7.5 to 1.8.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/zhongwencool/observer_cli/releases">observer_cli's
releases</a>.</em></p>
<blockquote>
<h2>1.8.1</h2>
<h2>What's Changed</h2>
<ul>
<li>chore: move xref from rebar.config to code attribute by <a
href="https://github.com/zhongwencool"><code>@zhongwencool</code></a>
in <a
href="https://redirect.github.com/zhongwencool/observer_cli/pull/106">zhongwencool/observer_cli#106</a></li>
<li>feat: show node name in system pane by <a
href="https://github.com/zhongwencool"><code>@zhongwencool</code></a>
in <a
href="https://redirect.github.com/zhongwencool/observer_cli/pull/107">zhongwencool/observer_cli#107</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/zhongwencool/observer_cli/compare/1.8.0...1.8.1">https://github.com/zhongwencool/observer_cli/compare/1.8.0...1.8.1</a></p>
<h2>Show process's label and node's dist_stats</h2>
<h2>New Feature:</h2>
<ul>
<li><strong>Process Label Display</strong>: Now shows the process's
label when set using proc_lib:set_label(Label).</li>
<li><strong>System View Update</strong>: Displays the number of bytes in
the output distribution queue, which sits between Erlang code and the
port driver, using the undocumented function
erlang:dist_get_stat/1.</li>
<li>Added support for <!-- raw HTML omitted --> to jump to a specific
process PID.</li>
</ul>
<h2>Bug Fix</h2>
<ul>
<li>Resolved an issue where the Doc View would not display when the OTP
version is 27.</li>
</ul>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0d33bc31ed"><code>0d33bc3</code></a>
feat: show node name in system pane</li>
<li><a
href="a5a35823f5"><code>a5a3582</code></a>
chore: move xref from rebar.config to code attribute</li>
<li><a
href="19b2011397"><code>19b2011</code></a>
bump to 1.8.0 (<a
href="https://redirect.github.com/zhongwencool/observer_cli/issues/105">#105</a>)</li>
<li><a
href="505b3acbaa"><code>505b3ac</code></a>
feat: display process label when otp 27 (<a
href="https://redirect.github.com/zhongwencool/observer_cli/issues/104">#104</a>)</li>
<li>See full diff in <a
href="https://github.com/zhongwencool/observer_cli/compare/1.7.5...1.8.1">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [ex_cldr](https://github.com/elixir-cldr/cldr) from 2.40.1 to
2.40.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/elixir-cldr/cldr/releases">ex_cldr's
releases</a>.</em></p>
<blockquote>
<h2>Cldr version 2.40.2</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Support (and automatically configure) Elixir 1.18's JSON module as a
<code>:json_library</code> in the global configuration. Thanks to <a
href="https://github.com/Neophen"><code>@Neophen</code></a> for the
report. Closes <a
href="https://redirect.github.com/elixir-cldr/cldr/issues/247">#247</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/elixir-cldr/cldr/blob/main/CHANGELOG.md">ex_cldr's
changelog</a>.</em></p>
<blockquote>
<h2>Cldr v2.40.2</h2>
<p>This is the changelog for Cldr v2.40.2 released on December 23rd,
2024. For older changelogs please consult the release tag on <a
href="https://github.com/elixir-cldr/cldr/tags">GitHub</a></p>
<h3>Bug Fixes</h3>
<ul>
<li>Support (and automatically configure) Elixir 1.18's JSON module as a
<code>:json_library</code> in the global configuration. Thanks to <a
href="https://github.com/Neophen"><code>@Neophen</code></a> for the
report. Closes <a
href="https://redirect.github.com/elixir-cldr/cldr/issues/247">#247</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a4699ef478"><code>a4699ef</code></a>
Support JSON.decode!/1 on Elixir 1.18. Closes <a
href="https://redirect.github.com/elixir-cldr/cldr/issues/147">#147</a></li>
<li><a
href="436c242d69"><code>436c242</code></a>
Merge pull request <a
href="https://redirect.github.com/elixir-cldr/cldr/issues/239">#239</a>
from WurmPeter/fix_cldr_version</li>
<li><a
href="2353141d22"><code>2353141</code></a>
Merge pull request <a
href="https://redirect.github.com/elixir-cldr/cldr/issues/240">#240</a>
from paynegreen/patch-1</li>
<li><a
href="9f0e9792bb"><code>9f0e979</code></a>
Fix changelog typo, add dev_helpers.ex</li>
<li><a
href="fabc4e24df"><code>fabc4e2</code></a>
Minor corrections in the README docs.</li>
<li><a
href="08cca8ed45"><code>08cca8e</code></a>
Bump version of cldr to 45 in README.md</li>
<li><a
href="29ba1d01ba"><code>29ba1d0</code></a>
Fix one more gettext dev backend config</li>
<li><a
href="976164893e"><code>9761648</code></a>
Use Gettext 0.26 and adjust test backends accordingly</li>
<li>See full diff in <a
href="https://github.com/elixir-cldr/cldr/compare/v2.40.1...v2.40.2">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>