Compare commits

..

3 Commits

Author SHA1 Message Date
Carlos Monastyrski
9e6294786f Remove infisical/ from new tags 2025-08-07 22:42:14 -03:00
Maidul Islam
7e94791635 update release channels 2025-08-07 16:46:41 -07:00
Carlos Monastyrski
93445d96b3 Add Release Channels with nightly 2025-08-06 21:10:15 -03:00
4 changed files with 153 additions and 5 deletions

View File

@@ -0,0 +1,83 @@
name: Generate Nightly Tag
on:
schedule:
- cron: '0 0 * * *' # Run daily at midnight UTC
workflow_dispatch: # Allow manual triggering for testing
permissions:
contents: write
jobs:
create-nightly-tag:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for tags
- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Generate nightly tag
run: |
# Get the latest infisical production tag
LATEST_STABLE_TAG=$(git tag --list | grep "^v[0-9].*$" | sort -V | tail -n1)
if [ -z "$LATEST_STABLE_TAG" ]; then
echo "No infisical production tags found, using v0.1.0"
LATEST_STABLE_TAG="v0.1.0"
fi
echo "Latest production tag: $LATEST_STABLE_TAG"
# Get current date in YYYYMMDD format
DATE=$(date +%Y%m%d)
# Base nightly tag name
BASE_TAG="${LATEST_STABLE_TAG}-nightly-${DATE}"
# Check if this exact tag already exists
if git tag --list | grep -q "^${BASE_TAG}$"; then
echo "Base tag ${BASE_TAG} already exists, finding next increment"
# Find existing tags for this date and get the highest increment
EXISTING_TAGS=$(git tag --list | grep "^${BASE_TAG}" | grep -E '\.[0-9]+$' || true)
if [ -z "$EXISTING_TAGS" ]; then
# No incremental tags exist, create .1
NIGHTLY_TAG="${BASE_TAG}.1"
else
# Find the highest increment
HIGHEST_INCREMENT=$(echo "$EXISTING_TAGS" | sed "s|^${BASE_TAG}\.||" | sort -n | tail -n1)
NEXT_INCREMENT=$((HIGHEST_INCREMENT + 1))
NIGHTLY_TAG="${BASE_TAG}.${NEXT_INCREMENT}"
fi
else
# Base tag doesn't exist, use it
NIGHTLY_TAG="$BASE_TAG"
fi
echo "Generated nightly tag: $NIGHTLY_TAG"
echo "NIGHTLY_TAG=$NIGHTLY_TAG" >> $GITHUB_ENV
echo "LATEST_PRODUCTION_TAG=$LATEST_STABLE_TAG" >> $GITHUB_ENV
git tag "$NIGHTLY_TAG"
git push origin "$NIGHTLY_TAG"
echo "✅ Created and pushed nightly tag: $NIGHTLY_TAG"
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.NIGHTLY_TAG }}
name: ${{ env.NIGHTLY_TAG }}
draft: false
prerelease: true
generate_release_notes: true
make_latest: false

View File

@@ -303,6 +303,7 @@
},
"self-hosting/guides/upgrading-infisical",
"self-hosting/configuration/envars",
"self-hosting/guides/releases",
"self-hosting/configuration/requirements",
{
"group": "Guides",

View File

@@ -0,0 +1,66 @@
---
title: "Release Channels"
description: "Learn how to configure your deployment for different release schedules."
---
Infisical uses rolling release channels to deliver new features, security fixes, and improvements with different update frequencies.
This system allows you to balance getting the latest features with maintaining stability in your deployment environment.
## What are release channels?
Release channels define different schedules under which Infisical makes new releases available for you to deploy.
Each channel operates on its own cadence, allowing you to choose how frequently you want to update your self-hosted deployment while balancing access to the latest features with your organization's stability requirements.
## Available Channels
Infisical provides two distinct release channels with different update frequencies and stability profiles.
<Tabs>
<Tab title="Nightly Channel">
- **Update Frequency**: Daily builds during weekdays (Monday-Friday)
- **Version Tags**: `vX.Y.Z-nightly-YYYYMMDD` (e.g., `v0.146.0-nightly-20250423`)
- **Multiple Daily Builds**: If multiple nightly builds are created on the same day, they are numbered incrementally: `vX.Y.Z-nightly-YYYYMMDD.1`, `vX.Y.Z-nightly-YYYYMMDD.2`, etc.
- **Stability**: Latest features with standard CI/CD testing
- **Release Process**: Built from main branch after all automated tests pass
- **Intended Audience**: Development environments & early adopters
**Best for:**
- Organizations with flexible change management
- Teams that want to test new features before they are made available via stable release channel
**Characteristics:**
- Access to latest features immediately
- Faster security patch delivery
- Higher update frequency (daily)
</Tab>
<Tab title="Stable Channel">
- **Update Frequency**: Monthly releases (typically 1st Tuesday of each month)
- **Version Tags**: `vX.Y.Z` (e.g., `v0.145.0`, `v0.146.0`)
- **Stability**: Both code tested and production-proven releases
- **Release Process**: Features validated through nightly channel for 30+ days
- **Intended Audience**: Production environments, enterprise teams prioritizing stability
**Best for:**
- Enterprise environments with limited change windows
- Organizations requiring predictable release cycles
- Teams prioritizing stability and long-term support
**Characteristics:**
- Predictable monthly schedule
- Extensive testing and validation
- Production-proven features
</Tab>
</Tabs>
<Warning>
Schedule Note: Target dates are approximate and subject to change based on critical issues, security updates, or maintenance requirements.
</Warning>
## Staying up to date
Track what features are available in each version across different sources:
- **Released versions**: View detailed changelogs, new features, and breaking changes in our [GitHub Releases](https://github.com/Infisical/infisical/releases)
- **Docker Image Versions**: Browse available container images and tags on [Docker Hub](https://hub.docker.com/r/infisical/infisical)
- **Linux Package Releases**: Access downloadable packages and version history on our [Linux releases page](https://cloudsmith.io/~infisical/repos/infisical-core/packages/)

View File

@@ -119,7 +119,7 @@ export const LogsFilter = ({ presets, setFilter, filter, project }: Props) => {
)}
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="mt-4 overflow-visible py-4">
<DropdownMenuContent align="end" className="mt-4 py-4">
<form onSubmit={handleSubmit(setFilter)}>
<div className="flex min-w-64 flex-col font-inter">
<div className="mb-3 flex items-center border-b border-b-mineshaft-500 px-3 pb-2">
@@ -176,8 +176,7 @@ export const LogsFilter = ({ presets, setFilter, filter, project }: Props) => {
</div>
</DropdownMenuTrigger>
<DropdownMenuContent
align="end"
sideOffset={2}
align="start"
className="thin-scrollbar z-[100] max-h-80 overflow-hidden"
>
<div className="max-h-80 overflow-y-auto">
@@ -259,7 +258,6 @@ export const LogsFilter = ({ presets, setFilter, filter, project }: Props) => {
else setValue("userAgentType", e as UserAgentType, { shouldDirty: true });
}}
className={twMerge("w-full border border-mineshaft-500 bg-mineshaft-700")}
position="popper"
>
<SelectItem value="all" key="all">
All sources
@@ -321,6 +319,7 @@ export const LogsFilter = ({ presets, setFilter, filter, project }: Props) => {
<AnimatePresence initial={false}>
{showSecretsSection && (
<motion.div
className="overflow-hidden"
initial={{ opacity: 0, height: 0 }}
animate={{ opacity: 1, height: "auto" }}
exit={{ opacity: 0, height: 0 }}
@@ -353,7 +352,6 @@ export const LogsFilter = ({ presets, setFilter, filter, project }: Props) => {
>
<FilterableSelect
value={value}
menuPlacement="top"
key={value?.name || "filter-environment"}
isClearable
isDisabled={!selectedProject}