mirror of
https://github.com/cloudnative-pg/plugin-barman-cloud.git
synced 2026-09-04 22:22:21 +02:00
Compare commits
7 Commits
af35aecdd3
...
2bdff5391f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2bdff5391f | ||
|
|
3958ee4805 | ||
|
|
e7905b9da9 | ||
|
|
cd71e7d5fd | ||
|
|
97675a7685 | ||
|
|
1eeed9f783 | ||
|
|
6ec77fb159 |
2
Makefile
2
Makefile
@ -159,7 +159,7 @@ GOLANGCI_LINT = $(LOCALBIN)/golangci-lint
|
|||||||
|
|
||||||
## Tool Versions
|
## Tool Versions
|
||||||
KUSTOMIZE_VERSION ?= v5.4.3
|
KUSTOMIZE_VERSION ?= v5.4.3
|
||||||
CONTROLLER_TOOLS_VERSION ?= v0.16.1
|
CONTROLLER_TOOLS_VERSION ?= v0.19.0
|
||||||
ENVTEST_VERSION ?= release-0.19
|
ENVTEST_VERSION ?= release-0.19
|
||||||
GOLANGCI_LINT_VERSION ?= v1.64.8
|
GOLANGCI_LINT_VERSION ?= v1.64.8
|
||||||
|
|
||||||
|
|||||||
@ -94,6 +94,9 @@ type RecoveryWindow struct {
|
|||||||
|
|
||||||
// The last failed backup time
|
// The last failed backup time
|
||||||
LastFailedBackupTime *metav1.Time `json:"lastFailedBackupTime,omitempty"`
|
LastFailedBackupTime *metav1.Time `json:"lastFailedBackupTime,omitempty"`
|
||||||
|
|
||||||
|
// The last time a WAL file was successfully archived by this plugin
|
||||||
|
LastArchivedWALTime *metav1.Time `json:"lastArchivedWALTime,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// +kubebuilder:object:root=true
|
// +kubebuilder:object:root=true
|
||||||
|
|||||||
@ -169,6 +169,10 @@ func (in *RecoveryWindow) DeepCopyInto(out *RecoveryWindow) {
|
|||||||
in, out := &in.LastFailedBackupTime, &out.LastFailedBackupTime
|
in, out := &in.LastFailedBackupTime, &out.LastFailedBackupTime
|
||||||
*out = (*in).DeepCopy()
|
*out = (*in).DeepCopy()
|
||||||
}
|
}
|
||||||
|
if in.LastArchivedWALTime != nil {
|
||||||
|
in, out := &in.LastArchivedWALTime, &out.LastArchivedWALTime
|
||||||
|
*out = (*in).DeepCopy()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RecoveryWindow.
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RecoveryWindow.
|
||||||
|
|||||||
@ -698,6 +698,11 @@ spec:
|
|||||||
restored.
|
restored.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
|
lastArchivedWALTime:
|
||||||
|
description: The last time a WAL file was successfully archived
|
||||||
|
by this plugin
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
lastFailedBackupTime:
|
lastFailedBackupTime:
|
||||||
description: The last failed backup time
|
description: The last failed backup time
|
||||||
format: date-time
|
format: date-time
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
barmanapi "github.com/cloudnative-pg/barman-cloud/pkg/api"
|
barmanapi "github.com/cloudnative-pg/barman-cloud/pkg/api"
|
||||||
@ -39,7 +40,10 @@ import (
|
|||||||
walUtils "github.com/cloudnative-pg/machinery/pkg/fileutils/wals"
|
walUtils "github.com/cloudnative-pg/machinery/pkg/fileutils/wals"
|
||||||
"github.com/cloudnative-pg/machinery/pkg/log"
|
"github.com/cloudnative-pg/machinery/pkg/log"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/client-go/util/retry"
|
||||||
|
"k8s.io/utils/ptr"
|
||||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||||
|
|
||||||
barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
|
barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
|
||||||
@ -68,6 +72,11 @@ func (e *SpoolManagementError) Unwrap() error {
|
|||||||
return e.err
|
return e.err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
// walStatusUpdateThrottle is the minimum time between status updates for WAL archiving
|
||||||
|
walStatusUpdateThrottle = 5 * time.Minute
|
||||||
|
)
|
||||||
|
|
||||||
// WALServiceImplementation is the implementation of the WAL Service
|
// WALServiceImplementation is the implementation of the WAL Service
|
||||||
type WALServiceImplementation struct {
|
type WALServiceImplementation struct {
|
||||||
wal.UnimplementedWALServer
|
wal.UnimplementedWALServer
|
||||||
@ -76,6 +85,9 @@ type WALServiceImplementation struct {
|
|||||||
SpoolDirectory string
|
SpoolDirectory string
|
||||||
PGDataPath string
|
PGDataPath string
|
||||||
PGWALPath string
|
PGWALPath string
|
||||||
|
// LastStatusUpdate tracks the last time we updated the status for each ObjectStore+ServerName
|
||||||
|
// Key format: "namespace/objectStoreName/serverName"
|
||||||
|
LastStatusUpdate *sync.Map
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCapabilities implements the WALService interface
|
// GetCapabilities implements the WALService interface
|
||||||
@ -103,6 +115,37 @@ func (w WALServiceImplementation) GetCapabilities(
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// shouldUpdateStatus checks if we should update the status based on the throttle.
|
||||||
|
// It returns true if walStatusUpdateThrottle minutes have passed since the last update, or if this is the first update.
|
||||||
|
func (w WALServiceImplementation) shouldUpdateStatus(objectStoreKey client.ObjectKey, serverName string) bool {
|
||||||
|
if w.LastStatusUpdate == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
key := fmt.Sprintf("%s/%s", objectStoreKey.String(), serverName)
|
||||||
|
lastUpdate, ok := w.LastStatusUpdate.Load(key)
|
||||||
|
if !ok {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
lastUpdateTime, ok := lastUpdate.(time.Time)
|
||||||
|
if !ok {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return time.Since(lastUpdateTime) >= walStatusUpdateThrottle
|
||||||
|
}
|
||||||
|
|
||||||
|
// recordStatusUpdate records that we just updated the status for a given ObjectStore and server.
|
||||||
|
func (w WALServiceImplementation) recordStatusUpdate(objectStoreKey client.ObjectKey, serverName string) {
|
||||||
|
if w.LastStatusUpdate == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
key := fmt.Sprintf("%s/%s", objectStoreKey.String(), serverName)
|
||||||
|
w.LastStatusUpdate.Store(key, time.Now())
|
||||||
|
}
|
||||||
|
|
||||||
// Archive implements the WALService interface
|
// Archive implements the WALService interface
|
||||||
func (w WALServiceImplementation) Archive(
|
func (w WALServiceImplementation) Archive(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
@ -225,6 +268,28 @@ func (w WALServiceImplementation) Archive(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update the last archived WAL time in the ObjectStore status
|
||||||
|
// Only update if walStatusUpdateThrottle minutes have passed since the last update to avoid hitting the API server too often
|
||||||
|
objectStoreKey := configuration.GetBarmanObjectKey()
|
||||||
|
if w.shouldUpdateStatus(objectStoreKey, configuration.ServerName) {
|
||||||
|
contextLogger.Debug("Updating last archived WAL time", "serverName", configuration.ServerName)
|
||||||
|
if err := setLastArchivedWALTime(
|
||||||
|
ctx,
|
||||||
|
w.Client,
|
||||||
|
objectStoreKey,
|
||||||
|
configuration.ServerName,
|
||||||
|
time.Now(),
|
||||||
|
); err != nil {
|
||||||
|
// Log the error but don't fail the archive operation
|
||||||
|
contextLogger.Error(err, "Error updating last archived WAL time in ObjectStore status")
|
||||||
|
} else {
|
||||||
|
contextLogger.Debug("Successfully updated last archived WAL time")
|
||||||
|
w.recordStatusUpdate(objectStoreKey, configuration.ServerName)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
contextLogger.Debug("Skipping status update due to throttle", "serverName", configuration.ServerName)
|
||||||
|
}
|
||||||
|
|
||||||
return &wal.WALArchiveResult{}, nil
|
return &wal.WALArchiveResult{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -596,3 +661,30 @@ func isEndOfWALStream(results []barmanRestorer.Result) bool {
|
|||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetLastArchivedWALTime sets the last archived WAL time in the
|
||||||
|
// passed object store, for the passed server name.
|
||||||
|
func setLastArchivedWALTime(
|
||||||
|
ctx context.Context,
|
||||||
|
c client.Client,
|
||||||
|
objectStoreKey client.ObjectKey,
|
||||||
|
serverName string,
|
||||||
|
lastArchivedWALTime time.Time,
|
||||||
|
) error {
|
||||||
|
return retry.RetryOnConflict(retry.DefaultBackoff, func() error {
|
||||||
|
var objectStore barmancloudv1.ObjectStore
|
||||||
|
|
||||||
|
if err := c.Get(ctx, objectStoreKey, &objectStore); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
recoveryWindow := objectStore.Status.ServerRecoveryWindow[serverName]
|
||||||
|
recoveryWindow.LastArchivedWALTime = ptr.To(metav1.NewTime(lastArchivedWALTime))
|
||||||
|
|
||||||
|
if objectStore.Status.ServerRecoveryWindow == nil {
|
||||||
|
objectStore.Status.ServerRecoveryWindow = make(map[string]barmancloudv1.RecoveryWindow)
|
||||||
|
}
|
||||||
|
objectStore.Status.ServerRecoveryWindow[serverName] = recoveryWindow
|
||||||
|
|
||||||
|
return c.Status().Update(ctx, &objectStore)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@ -51,6 +51,7 @@ var (
|
|||||||
firstRecoverabilityPointMetricName = buildFqName("first_recoverability_point")
|
firstRecoverabilityPointMetricName = buildFqName("first_recoverability_point")
|
||||||
lastAvailableBackupTimestampMetricName = buildFqName("last_available_backup_timestamp")
|
lastAvailableBackupTimestampMetricName = buildFqName("last_available_backup_timestamp")
|
||||||
lastFailedBackupTimestampMetricName = buildFqName("last_failed_backup_timestamp")
|
lastFailedBackupTimestampMetricName = buildFqName("last_failed_backup_timestamp")
|
||||||
|
lastArchivedWALTimestampMetricName = buildFqName("last_archived_wal_timestamp")
|
||||||
)
|
)
|
||||||
|
|
||||||
func (m metricsImpl) GetCapabilities(
|
func (m metricsImpl) GetCapabilities(
|
||||||
@ -97,6 +98,11 @@ func (m metricsImpl) Define(
|
|||||||
Help: "The last failed backup as a unix timestamp",
|
Help: "The last failed backup as a unix timestamp",
|
||||||
ValueType: &metrics.MetricType{Type: metrics.MetricType_TYPE_GAUGE},
|
ValueType: &metrics.MetricType{Type: metrics.MetricType_TYPE_GAUGE},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
FqName: lastArchivedWALTimestampMetricName,
|
||||||
|
Help: "The last archived WAL timestamp as a unix timestamp",
|
||||||
|
ValueType: &metrics.MetricType{Type: metrics.MetricType_TYPE_GAUGE},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@ -136,6 +142,10 @@ func (m metricsImpl) Collect(
|
|||||||
FqName: lastFailedBackupTimestampMetricName,
|
FqName: lastFailedBackupTimestampMetricName,
|
||||||
Value: 0,
|
Value: 0,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
FqName: lastArchivedWALTimestampMetricName,
|
||||||
|
Value: 0,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@ -143,6 +153,7 @@ func (m metricsImpl) Collect(
|
|||||||
var firstRecoverabilityPoint float64
|
var firstRecoverabilityPoint float64
|
||||||
var lastAvailableBackup float64
|
var lastAvailableBackup float64
|
||||||
var lastFailedBackup float64
|
var lastFailedBackup float64
|
||||||
|
var lastArchivedWAL float64
|
||||||
if x.FirstRecoverabilityPoint != nil {
|
if x.FirstRecoverabilityPoint != nil {
|
||||||
firstRecoverabilityPoint = float64(x.FirstRecoverabilityPoint.Unix())
|
firstRecoverabilityPoint = float64(x.FirstRecoverabilityPoint.Unix())
|
||||||
}
|
}
|
||||||
@ -152,6 +163,9 @@ func (m metricsImpl) Collect(
|
|||||||
if x.LastFailedBackupTime != nil {
|
if x.LastFailedBackupTime != nil {
|
||||||
lastFailedBackup = float64(x.LastFailedBackupTime.Unix())
|
lastFailedBackup = float64(x.LastFailedBackupTime.Unix())
|
||||||
}
|
}
|
||||||
|
if x.LastArchivedWALTime != nil {
|
||||||
|
lastArchivedWAL = float64(x.LastArchivedWALTime.Unix())
|
||||||
|
}
|
||||||
|
|
||||||
return &metrics.CollectMetricsResult{
|
return &metrics.CollectMetricsResult{
|
||||||
Metrics: []*metrics.CollectMetric{
|
Metrics: []*metrics.CollectMetric{
|
||||||
@ -167,6 +181,10 @@ func (m metricsImpl) Collect(
|
|||||||
FqName: lastFailedBackupTimestampMetricName,
|
FqName: lastFailedBackupTimestampMetricName,
|
||||||
Value: lastFailedBackup,
|
Value: lastFailedBackup,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
FqName: lastArchivedWALTimestampMetricName,
|
||||||
|
Value: lastArchivedWAL,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,10 +22,11 @@ package instance
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"time"
|
||||||
|
|
||||||
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
|
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
|
||||||
"github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/metadata"
|
"github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/metadata"
|
||||||
"k8s.io/utils/ptr"
|
"k8s.io/utils/ptr"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/cloudnative-pg/cnpg-i/pkg/metrics"
|
"github.com/cloudnative-pg/cnpg-i/pkg/metrics"
|
||||||
barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
|
barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
|
||||||
@ -117,7 +118,7 @@ var _ = Describe("Metrics Collect method", func() {
|
|||||||
res, err := m.Collect(ctx, req)
|
res, err := m.Collect(ctx, req)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(res).ToNot(BeNil())
|
Expect(res).ToNot(BeNil())
|
||||||
Expect(res.Metrics).To(HaveLen(3))
|
Expect(res.Metrics).To(HaveLen(4))
|
||||||
|
|
||||||
// Verify the metrics
|
// Verify the metrics
|
||||||
metricsMap := make(map[string]float64)
|
metricsMap := make(map[string]float64)
|
||||||
@ -131,6 +132,13 @@ var _ = Describe("Metrics Collect method", func() {
|
|||||||
|
|
||||||
expectedLastBackup, _ := metricsMap[lastAvailableBackupTimestampMetricName]
|
expectedLastBackup, _ := metricsMap[lastAvailableBackupTimestampMetricName]
|
||||||
Expect(expectedLastBackup).To(BeNumerically("~", float64(objectStore.Status.ServerRecoveryWindow[clusterName].LastSuccessfulBackupTime.Unix()), 1))
|
Expect(expectedLastBackup).To(BeNumerically("~", float64(objectStore.Status.ServerRecoveryWindow[clusterName].LastSuccessfulBackupTime.Unix()), 1))
|
||||||
|
|
||||||
|
// Check that unset timestamps are 0
|
||||||
|
expectedLastFailedBackup, _ := metricsMap[lastFailedBackupTimestampMetricName]
|
||||||
|
Expect(expectedLastFailedBackup).To(BeZero())
|
||||||
|
|
||||||
|
expectedLastArchivedWAL, _ := metricsMap[lastArchivedWALTimestampMetricName]
|
||||||
|
Expect(expectedLastArchivedWAL).To(BeZero())
|
||||||
})
|
})
|
||||||
|
|
||||||
It("should return an error if the object store is not found", func() {
|
It("should return an error if the object store is not found", func() {
|
||||||
|
|||||||
@ -21,6 +21,7 @@ package instance
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/cloudnative-pg/cnpg-i-machinery/pkg/pluginhelper/http"
|
"github.com/cloudnative-pg/cnpg-i-machinery/pkg/pluginhelper/http"
|
||||||
"github.com/cloudnative-pg/cnpg-i/pkg/backup"
|
"github.com/cloudnative-pg/cnpg-i/pkg/backup"
|
||||||
@ -49,11 +50,12 @@ type CNPGI struct {
|
|||||||
func (c *CNPGI) Start(ctx context.Context) error {
|
func (c *CNPGI) Start(ctx context.Context) error {
|
||||||
enrich := func(server *grpc.Server) error {
|
enrich := func(server *grpc.Server) error {
|
||||||
wal.RegisterWALServer(server, common.WALServiceImplementation{
|
wal.RegisterWALServer(server, common.WALServiceImplementation{
|
||||||
InstanceName: c.InstanceName,
|
InstanceName: c.InstanceName,
|
||||||
Client: c.Client,
|
Client: c.Client,
|
||||||
SpoolDirectory: c.SpoolDirectory,
|
SpoolDirectory: c.SpoolDirectory,
|
||||||
PGDataPath: c.PGDataPath,
|
PGDataPath: c.PGDataPath,
|
||||||
PGWALPath: c.PGWALPath,
|
PGWALPath: c.PGWALPath,
|
||||||
|
LastStatusUpdate: &sync.Map{},
|
||||||
})
|
})
|
||||||
backup.RegisterBackupServer(server, BackupServiceImplementation{
|
backup.RegisterBackupServer(server, BackupServiceImplementation{
|
||||||
Client: c.Client,
|
Client: c.Client,
|
||||||
|
|||||||
@ -22,6 +22,7 @@ package restore
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"path"
|
"path"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/cloudnative-pg/cnpg-i-machinery/pkg/pluginhelper/http"
|
"github.com/cloudnative-pg/cnpg-i-machinery/pkg/pluginhelper/http"
|
||||||
restore "github.com/cloudnative-pg/cnpg-i/pkg/restore/job"
|
restore "github.com/cloudnative-pg/cnpg-i/pkg/restore/job"
|
||||||
@ -46,11 +47,12 @@ type CNPGI struct {
|
|||||||
func (c *CNPGI) Start(ctx context.Context) error {
|
func (c *CNPGI) Start(ctx context.Context) error {
|
||||||
enrich := func(server *grpc.Server) error {
|
enrich := func(server *grpc.Server) error {
|
||||||
wal.RegisterWALServer(server, common.WALServiceImplementation{
|
wal.RegisterWALServer(server, common.WALServiceImplementation{
|
||||||
InstanceName: c.InstanceName,
|
InstanceName: c.InstanceName,
|
||||||
Client: c.Client,
|
Client: c.Client,
|
||||||
SpoolDirectory: c.SpoolDirectory,
|
SpoolDirectory: c.SpoolDirectory,
|
||||||
PGDataPath: c.PGDataPath,
|
PGDataPath: c.PGDataPath,
|
||||||
PGWALPath: path.Join(c.PGDataPath, "pg_wal"),
|
PGWALPath: path.Join(c.PGDataPath, "pg_wal"),
|
||||||
|
LastStatusUpdate: &sync.Map{},
|
||||||
})
|
})
|
||||||
|
|
||||||
restore.RegisterRestoreJobHooksServer(server, &JobHookImpl{
|
restore.RegisterRestoreJobHooksServer(server, &JobHookImpl{
|
||||||
|
|||||||
@ -54,10 +54,9 @@ Both checks are required before proceeding with the installation.
|
|||||||
|
|
||||||
## Installing the Barman Cloud Plugin
|
## Installing the Barman Cloud Plugin
|
||||||
|
|
||||||
import { InstallationSnippet } from '@site/src/components/Installation';
|
import { InstallationSnippet, ManifestVersion } from '@site/src/components/Installation';
|
||||||
|
|
||||||
Install the plugin using `kubectl` by applying the manifest for the latest
|
Install the plugin using `kubectl` by applying the manifest for <ManifestVersion />:
|
||||||
release:
|
|
||||||
|
|
||||||
<InstallationSnippet />
|
<InstallationSnippet />
|
||||||
|
|
||||||
@ -100,10 +99,6 @@ This confirms that the plugin is deployed and ready to use.
|
|||||||
|
|
||||||
## Testing the latest development snapshot
|
## Testing the latest development snapshot
|
||||||
|
|
||||||
You can also test the latest development snapshot of the plugin with the
|
import { DevSnapshotSection } from '@site/src/components/Installation';
|
||||||
following command:
|
|
||||||
|
|
||||||
```sh
|
<DevSnapshotSection />
|
||||||
kubectl apply -f \
|
|
||||||
https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml
|
|
||||||
```
|
|
||||||
|
|||||||
@ -1,16 +1,55 @@
|
|||||||
import {ReactElement} from 'react';
|
import {ReactElement} from 'react';
|
||||||
import CodeBlock from '@theme/CodeBlock';
|
import CodeBlock from '@theme/CodeBlock';
|
||||||
import {useCurrentVersion} from '@site/src/hooks/versions';
|
import {useActiveVersion} from '@docusaurus/plugin-content-docs/client';
|
||||||
|
|
||||||
// InstallationSnippet is the kubectl incantation to install the lastest
|
// DEV_MANIFEST_URL is the URL of the manifest.yaml on the main branch of the plugin repo.
|
||||||
// available version of the Barman Cloud Plugin.
|
const DEV_MANIFEST_URL =
|
||||||
|
'https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml';
|
||||||
|
|
||||||
|
// InstallationSnippet is the kubectl incantation to install the Barman
|
||||||
|
// Cloud Plugin: the manifest matching the doc version being viewed, or
|
||||||
|
// (on the unreleased "current" docs) the latest manifest on main.
|
||||||
export function InstallationSnippet(): ReactElement<null> {
|
export function InstallationSnippet(): ReactElement<null> {
|
||||||
const latest = useCurrentVersion('latestReleased');
|
const activeVersion = useActiveVersion('default');
|
||||||
|
const url = activeVersion && activeVersion.name !== 'current'
|
||||||
|
? `https://github.com/cloudnative-pg/plugin-barman-cloud/releases/download/v${activeVersion.name}/manifest.yaml`
|
||||||
|
: DEV_MANIFEST_URL;
|
||||||
return (
|
return (
|
||||||
<CodeBlock language="sh">
|
<CodeBlock language="sh">
|
||||||
{`kubectl apply -f \\
|
{`kubectl apply -f \\
|
||||||
https://github.com/cloudnative-pg/plugin-barman-cloud/releases/download/v${latest}/manifest.yaml`}
|
${url}`}
|
||||||
</CodeBlock>
|
</CodeBlock>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ManifestVersion names the manifest the snippet below installs: the
|
||||||
|
// release tag for a versioned docs page, or the main branch on Dev docs.
|
||||||
|
export function ManifestVersion(): ReactElement<null> {
|
||||||
|
const activeVersion = useActiveVersion('default');
|
||||||
|
return activeVersion && activeVersion.name !== 'current'
|
||||||
|
? <code>v{activeVersion.name}</code>
|
||||||
|
: <>the latest development snapshot from the <code>main</code> branch</>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// DevSnapshotSection offers the main-branch manifest as an alternative;
|
||||||
|
// on the Dev docs the main install already is that manifest, so hide it.
|
||||||
|
export function DevSnapshotSection(): ReactElement {
|
||||||
|
const activeVersion = useActiveVersion('default');
|
||||||
|
if (!activeVersion || activeVersion.name === 'current') {
|
||||||
|
return (
|
||||||
|
<p>The <a href="#installing-the-barman-cloud-plugin">install
|
||||||
|
command above</a> already applies the latest development
|
||||||
|
snapshot from the <code>main</code> branch.</p>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<p>You can also test the latest development snapshot of the plugin
|
||||||
|
with the following command:</p>
|
||||||
|
<CodeBlock language="sh">
|
||||||
|
{`kubectl apply -f \\
|
||||||
|
${DEV_MANIFEST_URL}`}
|
||||||
|
</CodeBlock>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@ -1,36 +0,0 @@
|
|||||||
import {useActiveVersion, useLatestVersion, useVersions} from '@docusaurus/plugin-content-docs/client';
|
|
||||||
|
|
||||||
|
|
||||||
export function useCurrentVersion(fallback: 'latest' | 'latestReleased' = 'latest'): string {
|
|
||||||
switch (fallback) {
|
|
||||||
case 'latestReleased':
|
|
||||||
return useLatestReleasedVersion();
|
|
||||||
case 'latest': {
|
|
||||||
const version = useActiveVersion('default');
|
|
||||||
return version?.name ?? useLatestVersion('default')?.name;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
// The following line ensures that if `fallback` is not 'latest' or 'latestReleased',
|
|
||||||
// an error is thrown. This can be useful for catching unexpected states.
|
|
||||||
throw new Error(`Unhandled fallback type: ${fallback}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function useLatestReleasedVersion(): string {
|
|
||||||
const allVersions = useVersions('default');
|
|
||||||
|
|
||||||
// Filter out "current" to only consider versioned docs
|
|
||||||
const versionedDocs = allVersions.filter(version => version.name !== 'current');
|
|
||||||
|
|
||||||
// Handle the case where no versioned documents are found
|
|
||||||
if (versionedDocs.length === 0) {
|
|
||||||
return "unknown_version";
|
|
||||||
}
|
|
||||||
|
|
||||||
const sortedVersions = versionedDocs.sort((a, b) => {
|
|
||||||
return b.name.localeCompare(a.name, undefined, { numeric: true, sensitivity: 'base' });
|
|
||||||
});
|
|
||||||
|
|
||||||
// The latest version is the first in the sorted list since versionedDocs was not empty,
|
|
||||||
return sortedVersions[0].name;
|
|
||||||
}
|
|
||||||
@ -54,10 +54,9 @@ Both checks are required before proceeding with the installation.
|
|||||||
|
|
||||||
## Installing the Barman Cloud Plugin
|
## Installing the Barman Cloud Plugin
|
||||||
|
|
||||||
import { InstallationSnippet } from '@site/src/components/Installation';
|
import { InstallationSnippet, ManifestVersion } from '@site/src/components/Installation';
|
||||||
|
|
||||||
Install the plugin using `kubectl` by applying the manifest for the latest
|
Install the plugin using `kubectl` by applying the manifest for <ManifestVersion />:
|
||||||
release:
|
|
||||||
|
|
||||||
<InstallationSnippet />
|
<InstallationSnippet />
|
||||||
|
|
||||||
@ -100,10 +99,6 @@ This confirms that the plugin is deployed and ready to use.
|
|||||||
|
|
||||||
## Testing the latest development snapshot
|
## Testing the latest development snapshot
|
||||||
|
|
||||||
You can also test the latest development snapshot of the plugin with the
|
import { DevSnapshotSection } from '@site/src/components/Installation';
|
||||||
following command:
|
|
||||||
|
|
||||||
```sh
|
<DevSnapshotSection />
|
||||||
kubectl apply -f \
|
|
||||||
https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml
|
|
||||||
```
|
|
||||||
|
|||||||
@ -54,10 +54,9 @@ Both checks are required before proceeding with the installation.
|
|||||||
|
|
||||||
## Installing the Barman Cloud Plugin
|
## Installing the Barman Cloud Plugin
|
||||||
|
|
||||||
import { InstallationSnippet } from '@site/src/components/Installation';
|
import { InstallationSnippet, ManifestVersion } from '@site/src/components/Installation';
|
||||||
|
|
||||||
Install the plugin using `kubectl` by applying the manifest for the latest
|
Install the plugin using `kubectl` by applying the manifest for <ManifestVersion />:
|
||||||
release:
|
|
||||||
|
|
||||||
<InstallationSnippet />
|
<InstallationSnippet />
|
||||||
|
|
||||||
@ -100,10 +99,6 @@ This confirms that the plugin is deployed and ready to use.
|
|||||||
|
|
||||||
## Testing the latest development snapshot
|
## Testing the latest development snapshot
|
||||||
|
|
||||||
You can also test the latest development snapshot of the plugin with the
|
import { DevSnapshotSection } from '@site/src/components/Installation';
|
||||||
following command:
|
|
||||||
|
|
||||||
```sh
|
<DevSnapshotSection />
|
||||||
kubectl apply -f \
|
|
||||||
https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml
|
|
||||||
```
|
|
||||||
|
|||||||
166
web/yarn.lock
166
web/yarn.lock
@ -2099,9 +2099,9 @@
|
|||||||
"@jridgewell/trace-mapping" "^0.3.25"
|
"@jridgewell/trace-mapping" "^0.3.25"
|
||||||
|
|
||||||
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
|
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
|
||||||
version "1.5.5"
|
version "1.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
|
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz#f4c663e862f06dc98ca4d453862c46902789a18d"
|
||||||
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
|
integrity sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==
|
||||||
|
|
||||||
"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28", "@jridgewell/trace-mapping@^0.3.31":
|
"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28", "@jridgewell/trace-mapping@^0.3.31":
|
||||||
version "0.3.31"
|
version "0.3.31"
|
||||||
@ -2141,75 +2141,75 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207"
|
||||||
integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==
|
integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==
|
||||||
|
|
||||||
"@jsonjoy.com/fs-core@4.68.1":
|
"@jsonjoy.com/fs-core@4.68.2":
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.68.1.tgz#15fed282af2a8efbd1a335a83ae1bd3507fa0237"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.68.2.tgz#ea3e3e3e07e0d808844ba7ee908dd47ad121eddf"
|
||||||
integrity sha512-V5oZ4Gt9WJKyQef0n9cAd0N9qjSkIBm3E4MYsgNIWBk5aINCDPKxMPo1i29rBxqiT4Ixf1epklqV9VJMKIxwlw==
|
integrity sha512-PoBeUNEbjyLKKwCap2z8LkkqdhdfttS4rTHCALVuP65BdF+sAoyBqHo1m+uGTRBiQWv3H7MGfr8f7lY4pDwanw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.68.1"
|
"@jsonjoy.com/fs-node-builtins" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.68.1"
|
"@jsonjoy.com/fs-node-utils" "4.68.2"
|
||||||
thingies "^2.5.0"
|
thingies "^2.5.0"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-fsa@4.68.1":
|
"@jsonjoy.com/fs-fsa@4.68.2":
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.68.1.tgz#009ebc90396622d37df984691fbe8bad51fdedea"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.68.2.tgz#01d59e3bedb3cfe4b32334abbb1004a75b481a76"
|
||||||
integrity sha512-HCG72UioncuO7Gw09XNVG+S85e3cq2hrUC/mexBrsWsa3mI7eePkkqWie3uVYbtsb64OR9YGQs5SqaufDRYBcg==
|
integrity sha512-h6eGXlLGGMyPfNliDQrbuHKTB9Z29ksCLjreAmdBqrDOBdfrTrHssi+b9WLfrF+J2KzAbIt9OMjJu6AEpTnYkg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-core" "4.68.1"
|
"@jsonjoy.com/fs-core" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.68.1"
|
"@jsonjoy.com/fs-node-builtins" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.68.1"
|
"@jsonjoy.com/fs-node-utils" "4.68.2"
|
||||||
thingies "^2.5.0"
|
thingies "^2.5.0"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-node-builtins@4.68.1":
|
"@jsonjoy.com/fs-node-builtins@4.68.2":
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.68.1.tgz#3c4ee9877e12d76eab8611663bea127d0e261fc5"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.68.2.tgz#ef82d558a6894b54537857ba153daa38a5326a05"
|
||||||
integrity sha512-HK1BTksysokNZxNspqDH0yPaqN9YgR/AYIlYiIaU2Ys4BOk5CdybI7r6BgiZuiiPiV8n4sK/kZdice7Znpy2Kw==
|
integrity sha512-V8WzQsW2YIrH3RxBGY6HZisxn+dDUltHgksVRuCdPEOXEkAfXuhL/01eHFrabNu84Dn13XuLqvcQUKOYVKAUOA==
|
||||||
|
|
||||||
"@jsonjoy.com/fs-node-to-fsa@4.68.1":
|
"@jsonjoy.com/fs-node-to-fsa@4.68.2":
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.68.1.tgz#d0dab7f007f9e01dcd1e62d2e27ec0fdd0126554"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.68.2.tgz#faf01a277752868d90681f6dcb86d3e01f05a296"
|
||||||
integrity sha512-lpKmU4X9e/oh8GIuAI7EXaS5QiLNM3KD15CkdhfS6PYmrGvoJqKQcyEfnLgnnaGslh/PFUMYSIZBCf2ejJGw8g==
|
integrity sha512-4O1K4w5G4oJIpKpoa3WSLG83AsQYVnGv+aUSBGOvIUph9Axm6bB1mPlvldkNg2tBx/4dkiTlZnqNrK5SQ21Wtg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-fsa" "4.68.1"
|
"@jsonjoy.com/fs-fsa" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.68.1"
|
"@jsonjoy.com/fs-node-builtins" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.68.1"
|
"@jsonjoy.com/fs-node-utils" "4.68.2"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-node-utils@4.68.1":
|
"@jsonjoy.com/fs-node-utils@4.68.2":
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.68.1.tgz#25fa70c1c11986eef75c1e6c52caea9fe2e69778"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.68.2.tgz#78311a84df4e4edc51f8e41fc042d3eed21cb0d4"
|
||||||
integrity sha512-/GxfW1DWm9SCdkfbvqevLO/P5duobQfmKkHXxdMIDbcZMQeAgooAstIfZhkXpATzq9QbCQsnoWFM/dGHdZfndw==
|
integrity sha512-CxFwyG9fJr7dAKAd1uanNRNrRMtDDqbYJA8do53+M4LY7SxcBEEmMjC1zi9MOsBlVLHTXvA7OP9+n639UqtIcw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.68.1"
|
"@jsonjoy.com/fs-node-builtins" "4.68.2"
|
||||||
glob-to-regex.js "^1.0.1"
|
glob-to-regex.js "^1.0.1"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-node@4.68.1":
|
"@jsonjoy.com/fs-node@4.68.2":
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.68.1.tgz#0ca716e6c3ef5ed8887fbd4b4557094f99293d19"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.68.2.tgz#166b641f7c810e12cbf92c483e9c7084123ed669"
|
||||||
integrity sha512-R5D9mWtqdURzcOWj1vdXr3APCwX0xchtFT+kmW7fXLNDifWdDrnh26jSID8pdnUfFBxTyfHtFtTL/NWKzIH7kQ==
|
integrity sha512-Kpj519Qk4OXG4+mZ8vTf9BEflliJrPueIDEVcbx8tAOufMJJ8IxR0WwdbcEvJol2KQog3PJjtALXVclorE+xbQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-core" "4.68.1"
|
"@jsonjoy.com/fs-core" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.68.1"
|
"@jsonjoy.com/fs-node-builtins" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.68.1"
|
"@jsonjoy.com/fs-node-utils" "4.68.2"
|
||||||
"@jsonjoy.com/fs-print" "4.68.1"
|
"@jsonjoy.com/fs-print" "4.68.2"
|
||||||
"@jsonjoy.com/fs-snapshot" "4.68.1"
|
"@jsonjoy.com/fs-snapshot" "4.68.2"
|
||||||
glob-to-regex.js "^1.0.0"
|
glob-to-regex.js "^1.0.0"
|
||||||
thingies "^2.5.0"
|
thingies "^2.5.0"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-print@4.68.1":
|
"@jsonjoy.com/fs-print@4.68.2":
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.68.1.tgz#bd830f90764155fb131320624248d33e720d6130"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.68.2.tgz#1562c2481393359644e2840c25a5082274378f39"
|
||||||
integrity sha512-oGeZOGPYKK9v1CgeVeEDsLomH1lCnslSpqUN5GmPzrmAVGQlsmsdcXNA2O4lV8Y4xkuSuynx2ITBkUHJVaTbow==
|
integrity sha512-cBABQmZJXig6bahwNka3+yPNGUF1GeMWbR76ZM1N2ajgCd+S+twZigCoe9+0ueZmkhM9xd2a7688Gy/ch7T+2w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-node-utils" "4.68.1"
|
"@jsonjoy.com/fs-node-utils" "4.68.2"
|
||||||
tree-dump "^1.1.0"
|
tree-dump "^1.1.0"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-snapshot@4.68.1":
|
"@jsonjoy.com/fs-snapshot@4.68.2":
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.68.1.tgz#672d82cb65dad18c3a1fcf7d22254d037e6a794a"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.68.2.tgz#6f1b2e5aa6827a1075f82162055ca8bedee0fe58"
|
||||||
integrity sha512-XZfP0FDZN32bbc4t2bZN2qRrYHg5AktJnzk22HRoKGK4BprrbNRH2k5ceSNS/kupKYcofCs+O841+xaAbjnxwQ==
|
integrity sha512-Aix7+NM38LzvewM0T3PICSgFdF5BVCtVgsjNsrlDPGc9hiMgJzReTDDl2/elgl0A9USMl3QP27x5WwxZSOtrfw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/buffers" "^17.65.0"
|
"@jsonjoy.com/buffers" "^17.65.0"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.68.1"
|
"@jsonjoy.com/fs-node-utils" "4.68.2"
|
||||||
"@jsonjoy.com/json-pack" "^17.65.0"
|
"@jsonjoy.com/json-pack" "^17.65.0"
|
||||||
"@jsonjoy.com/util" "^17.65.0"
|
"@jsonjoy.com/util" "^17.65.0"
|
||||||
|
|
||||||
@ -3564,9 +3564,9 @@ balanced-match@^1.0.0:
|
|||||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||||
|
|
||||||
baseline-browser-mapping@^2.11.12:
|
baseline-browser-mapping@^2.11.12:
|
||||||
version "2.11.19"
|
version "2.11.20"
|
||||||
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.19.tgz#4711abac48b88ccb56b5817e86f1b3a9a0764276"
|
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz#26078c7a4b08299656ea7ddceaebec955dc44303"
|
||||||
integrity sha512-Grytf1xOxOEMTGRwx6rLGKkTabd4vMg3VrKdj/7joCmV0qgh4QwMMO6xh34YEXQqirAuUdgQGa5orJQQ+69RBw==
|
integrity sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==
|
||||||
|
|
||||||
batch@0.6.1:
|
batch@0.6.1:
|
||||||
version "0.6.1"
|
version "0.6.1"
|
||||||
@ -4241,9 +4241,9 @@ css-what@^6.0.1, css-what@^6.1.0:
|
|||||||
integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==
|
integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==
|
||||||
|
|
||||||
cssdb@^8.6.0:
|
cssdb@^8.6.0:
|
||||||
version "8.10.0"
|
version "8.11.0"
|
||||||
resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.10.0.tgz#fdb9cc7af72c81839265811ad8ca4e0a4db919c1"
|
resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.11.0.tgz#e03c9cdc9c5e99d8cddf64a917bfc427b20c143a"
|
||||||
integrity sha512-+JWEEjjoqkPY7iGHps3SaCT2w67Zpaj9zHvhCJ2iPBavKHwgtOOD2YEbZSCU8VO2uVGpKdYjVz+j6bhkNSjZ0g==
|
integrity sha512-VzY/8kcK5M8oCVr/cwh24J8XVlCOITpmzCizKBC28o7Z1s23MMojXoJ3q7a+TQQoMKvxC3YlG0Z9yU10kJF1uQ==
|
||||||
|
|
||||||
cssesc@^3.0.0:
|
cssesc@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
@ -4568,9 +4568,9 @@ ee-first@1.1.1:
|
|||||||
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
||||||
|
|
||||||
electron-to-chromium@^1.5.402:
|
electron-to-chromium@^1.5.402:
|
||||||
version "1.5.415"
|
version "1.5.418"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.415.tgz#edd7356bfb4752a12c8293f8e38a00778b13bbb4"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.418.tgz#40ccbf6d572447663041611e05924b53bc9a0331"
|
||||||
integrity sha512-958V+Kbhtgz+SxXeEVKBjrlKRBIDAYvUJfwhjxMZ5S6ut9jAl7l9ZKBkBrvjyjZE36PabLUo2L8kEeV5O4vgJg==
|
integrity sha512-UzS26r3AEbG5wSoGVpJKqwHIU9zwQN7LHdVIThDrJpS0I5KdlXFMEb8543fhc9dVnIIAST6ar8rhwa00AL5MlA==
|
||||||
|
|
||||||
emoji-regex@^8.0.0:
|
emoji-regex@^8.0.0:
|
||||||
version "8.0.0"
|
version "8.0.0"
|
||||||
@ -4897,9 +4897,9 @@ fast-uri@^3.0.1:
|
|||||||
integrity sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==
|
integrity sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==
|
||||||
|
|
||||||
fastq@^1.6.0:
|
fastq@^1.6.0:
|
||||||
version "1.20.1"
|
version "1.20.3"
|
||||||
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675"
|
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.3.tgz#7ab8731e647b56abcfeee997dae333ca3ee1d04d"
|
||||||
integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==
|
integrity sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==
|
||||||
dependencies:
|
dependencies:
|
||||||
reusify "^1.0.4"
|
reusify "^1.0.4"
|
||||||
|
|
||||||
@ -6281,18 +6281,18 @@ media-typer@0.3.0:
|
|||||||
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
|
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
|
||||||
|
|
||||||
memfs@^4.43.1:
|
memfs@^4.43.1:
|
||||||
version "4.68.1"
|
version "4.68.2"
|
||||||
resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.68.1.tgz#e42fa69c873305a9cd0b28a8d230b96efacd8b5d"
|
resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.68.2.tgz#26aeb07f3774ccf79bf9d79483ea3241e1383254"
|
||||||
integrity sha512-OD+IDRUvIxu3QHL+nFm9gdyugInD27FDJ+sl4B5QgomPHXMlbw+GP918P8VNKu2FkNlVeqBkpzkwROpamVifRw==
|
integrity sha512-Un1ElEBoIdPI9kg0sm3LebVEuEViodfIvlaG8Z1MFXa7ZnR9vWuPKUo3dt/vuWY2ivc05l76B5QOjdgCzAzmGw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-core" "4.68.1"
|
"@jsonjoy.com/fs-core" "4.68.2"
|
||||||
"@jsonjoy.com/fs-fsa" "4.68.1"
|
"@jsonjoy.com/fs-fsa" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node" "4.68.1"
|
"@jsonjoy.com/fs-node" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.68.1"
|
"@jsonjoy.com/fs-node-builtins" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-to-fsa" "4.68.1"
|
"@jsonjoy.com/fs-node-to-fsa" "4.68.2"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.68.1"
|
"@jsonjoy.com/fs-node-utils" "4.68.2"
|
||||||
"@jsonjoy.com/fs-print" "4.68.1"
|
"@jsonjoy.com/fs-print" "4.68.2"
|
||||||
"@jsonjoy.com/fs-snapshot" "4.68.1"
|
"@jsonjoy.com/fs-snapshot" "4.68.2"
|
||||||
"@jsonjoy.com/json-pack" "^1.11.0"
|
"@jsonjoy.com/json-pack" "^1.11.0"
|
||||||
"@jsonjoy.com/util" "^1.9.0"
|
"@jsonjoy.com/util" "^1.9.0"
|
||||||
glob-to-regex.js "^1.0.1"
|
glob-to-regex.js "^1.0.1"
|
||||||
@ -8446,9 +8446,9 @@ send@~0.19.0, send@~0.19.1:
|
|||||||
statuses "~2.0.2"
|
statuses "~2.0.2"
|
||||||
|
|
||||||
serialize-javascript@>=7.0.5, serialize-javascript@^6.0.0, serialize-javascript@^6.0.1:
|
serialize-javascript@>=7.0.5, serialize-javascript@^6.0.0, serialize-javascript@^6.0.1:
|
||||||
version "7.1.0"
|
version "7.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-7.1.0.tgz#9e462c5c6dec5dbc8b55d90c52a4ad6aff985b9f"
|
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-7.1.1.tgz#c3b0a7ac13df6cf2fcda71cbb142ba9392a710b9"
|
||||||
integrity sha512-RNEqWOyhhUQYN9V1GfHwu9AR/g+NTciH6Z5u3/no6X3/w+04J2lVDL+svFQVXgXrEGBMG2puMVN3gq2SNGuTGw==
|
integrity sha512-k3CMsaIvvdSwm8oLB4MXSl0wH2/cwlH7xGcnRd2DaeRmBkbzYmyT8j0tsX60DwD1eRwHTpNpH8ljKu9oUT1MeQ==
|
||||||
|
|
||||||
serve-handler@^6.1.7:
|
serve-handler@^6.1.7:
|
||||||
version "6.1.7"
|
version "6.1.7"
|
||||||
@ -9117,9 +9117,9 @@ unpipe@~1.0.0:
|
|||||||
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
||||||
|
|
||||||
update-browserslist-db@^1.3.0:
|
update-browserslist-db@^1.3.0:
|
||||||
version "1.3.1"
|
version "1.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz#a71c28dd22f505481dbc4689087b18d933e90afd"
|
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz#9d99fbff56c50bb11ba5fd35cece5916da595836"
|
||||||
integrity sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==
|
integrity sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==
|
||||||
dependencies:
|
dependencies:
|
||||||
escalade "^3.2.0"
|
escalade "^3.2.0"
|
||||||
picocolors "^1.1.1"
|
picocolors "^1.1.1"
|
||||||
@ -9326,9 +9326,9 @@ webpack-sources@^3.5.1:
|
|||||||
integrity sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==
|
integrity sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==
|
||||||
|
|
||||||
webpack@^5.88.1, webpack@^5.95.0:
|
webpack@^5.88.1, webpack@^5.95.0:
|
||||||
version "5.110.0"
|
version "5.110.2"
|
||||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.110.0.tgz#504e6195f3a729ed3904b24961e43f0f51e1b79b"
|
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.110.2.tgz#ef23a0e62fe5e1ba71b033e3505b7f005d8d5c6e"
|
||||||
integrity sha512-vzGjrgzXNYRs0MBVkdF288cJt0RIJMxlZy+3pLFo6KIeZI57sBGCgjBp+yNQWf5g9c1us34rjivM1sfNLijQYg==
|
integrity sha512-TciLrfM7zgEjqGdY851HkirDsSPQgTFsWQpl9oHqMAMYsHhEC0bKjscvjpnz+pzx10hLC8qISApGrsnrCP4UtQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/estree" "^1.0.8"
|
"@types/estree" "^1.0.8"
|
||||||
"@types/json-schema" "^7.0.15"
|
"@types/json-schema" "^7.0.15"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user