diff --git a/release-scripts/generate-release-notes.ipynb b/release-scripts/generate-release-notes.ipynb
index 4808d64753..8c8f8e7496 100644
--- a/release-scripts/generate-release-notes.ipynb
+++ b/release-scripts/generate-release-notes.ipynb
@@ -222,9 +222,9 @@
"\n",
"### Create release folder and file\n",
"\n",
- "These lines will create a folder inside of `~/site/releases` for the release notes with a new `release-notes.qmd` file. The folder name is the release date, as per our convention. \n",
+ "These lines will create a folder inside of `~/site/releases` for the new release notes to live in and sets stage for the release notes to be generated. The folder name is the release date tucked into the yearly folder, as per our convention. \n",
"\n",
- "**If the directory and file already exists, you will be prompted to confirm whether or not you want to overwrite the contents.**"
+ "**If the directory and release file already exists, you will be prompted to confirm whether or not you want to overwrite the contents.**"
]
},
{
@@ -233,7 +233,7 @@
"metadata": {},
"outputs": [],
"source": [
- "output_file = gro.create_release_folder(gro.formatted_release_date)"
+ "output_file, year = gro.create_release_folder(gro.formatted_release_date)"
]
},
{
@@ -243,7 +243,9 @@
"\n",
"\n",
"### Add the date to release notes \n",
- "This block writes the specified date as the title of the new release notes file."
+ "This block writes the specified date as the title of the new release notes file.\n",
+ "\n",
+ "**It will also open up the newly created `release-notes.qmd` file for you so you don't have to go looking for it.**"
]
},
{
@@ -565,7 +567,7 @@
"metadata": {},
"outputs": [],
"source": [
- "gro.update_quarto_yaml(gro.release_datetime)"
+ "gro.update_quarto_yaml(gro.release_datetime, year)"
]
},
{
@@ -584,7 +586,7 @@
"metadata": {},
"outputs": [],
"source": [
- "gro.update_index_qmd(gro.release_datetime)"
+ "gro.update_index_qmd(gro.release_datetime, year)"
]
},
{
diff --git a/release-scripts/generate_release_objects.py b/release-scripts/generate_release_objects.py
index 12dfa27710..53fa50e48e 100644
--- a/release-scripts/generate_release_objects.py
+++ b/release-scripts/generate_release_objects.py
@@ -440,7 +440,11 @@ def create_release_folder(formatted_release_date):
Returns:
str: The path to the release notes file, or exits the script if the user chooses not to overwrite.
"""
- directory_path = f"../site/releases/{formatted_release_date}/"
+ # Parse the input date
+ parsed_date = datetime.datetime.strptime(formatted_release_date, "%Y-%b-%d")
+ year = parsed_date.year
+ formatted_date = parsed_date.strftime("%Y-%b-%d").lower() # e.g., "2025-jan-17"
+ directory_path = f"../site/releases/{year}/{formatted_date}/"
output_file = f"{directory_path}release-notes.qmd"
# Check if the directory and file already exist
@@ -453,7 +457,8 @@ def create_release_folder(formatted_release_date):
# Create directory and output file
os.makedirs(directory_path, exist_ok=True)
print(f"{output_file} will be created or overwritten")
- return output_file
+
+ return output_file, year
def create_release_qmd(output_file, original_release_date):
"""
@@ -468,6 +473,11 @@ def create_release_qmd(output_file, original_release_date):
with open(output_file, "w") as file:
file.write(f"---\ntitle: \"{original_release_date}\"\n---\n\n")
+ try:
+ subprocess.run(["code", output_file], check=True)
+ except Exception as e:
+ print(f"Error opening the file in VS Code: {e}")
+
def update_release_components(release_components, categories):
"""
Updates a dictionary of release components with the given categories.
@@ -721,7 +731,7 @@ def upgrade_info(output_file):
except Exception as e:
print(f"Failed to include _how-to-upgrade.qmd to {output_file}: {e}")
-def update_quarto_yaml(release_date):
+def update_quarto_yaml(release_date, year):
"""Updates the _quarto.yml file to include the release notes file so it can be accessed on the website.
Params:
@@ -734,7 +744,7 @@ def update_quarto_yaml(release_date):
# Format the release date for insertion into the YAML file
formatted_release_date = release_date.strftime("%Y-%b-%d").lower()
- target_line = f' - releases/{formatted_release_date}/release-notes.qmd\n'
+ target_line = f' - releases/{year}/{formatted_release_date}/release-notes.qmd\n'
# Check if the target line already exists in the YAML file
with open(yaml_filename, 'r') as file:
@@ -769,7 +779,7 @@ def update_quarto_yaml(release_date):
print(f"Added new release notes to _quarto.yml, line {insert_index + 2}")
-def update_index_qmd(release_date):
+def update_index_qmd(release_date, year):
"""Updates the index.qmd file to include the new releases in `Latest Releases` and removes the oldest release from the list.
Params:
@@ -783,7 +793,7 @@ def update_index_qmd(release_date):
# Format the release date for checking and insertion into the QMD file
formatted_release_date = release_date.strftime("%Y-%b-%d").lower()
- new_release_entry = f' - /releases/{formatted_release_date}/release-notes.qmd\n'
+ new_release_entry = f' - /releases/{year}/{formatted_release_date}/release-notes.qmd\n'
# Check if the release note already exists
with open(index_filename, 'r') as file:
@@ -905,7 +915,7 @@ def main():
print()
# Handle potential failure in create_release_folder
- output_file = create_release_folder(formatted_release_date)
+ output_file, year = create_release_folder(formatted_release_date)
if not output_file: # Ensure the function returns something valid
raise RuntimeError("Failed to create release folder.")
print()
@@ -959,10 +969,10 @@ def main():
upgrade_info(output_file)
print()
- update_quarto_yaml(release_datetime)
+ update_quarto_yaml(release_datetime, year)
print()
- update_index_qmd(release_datetime)
+ update_index_qmd(release_datetime, year)
print()
except Exception as e:
diff --git a/release-scripts/year-end-cleanup.ipynb b/release-scripts/year-end-cleanup.ipynb
index 708072c723..ded1344b87 100644
--- a/release-scripts/year-end-cleanup.ipynb
+++ b/release-scripts/year-end-cleanup.ipynb
@@ -4,18 +4,18 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "# Year end release cleanup"
+ "# Year-end release cleanup"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "This notebook automatically moves a full year of releases into their own subdirectory under `~site/releases/` and collates the releases into their yearly listing page, including a preliminary tidy up of any links broken by moving these files. \n",
+ "This notebook automatically collates a full year of releases into a yearly listing page under `~site/releases/` , including a preliminary tidy up of any links broken by moving these files. \n",
"\n",
- "It's easiest to run this notebook at the start of the new year, when all the releases for the previous year are ready to be collated, thus requiring minimum adjustment from you.\n",
+ "It's easiest to run this notebook at the start of the new year, when all the releases for the previous year are ready to be collected, thus requiring minimum adjustment from you.\n",
"\n",
- "After running the notebook, you can locate the new yearly release subdirectory that was inserted into our `About > Releases` section for you to clean up further, along with a live preview of the site to get you started."
+ "After running the notebook, you can review the new yearly release listing page that was inserted into our `About > Releases` section for you to clean up further, along with a live preview of the site to get you started."
]
},
{
@@ -28,18 +28,15 @@
" - [Import yearly cleanup script](#toc2_1_) \n",
" - [Specify the year](#toc2_2_) \n",
" - [Retrieve matching release folders](#toc2_3_) \n",
- "- [Creating the yearly folder](#toc3_) \n",
- " - [Create the yearly folder](#toc3_1_) \n",
- " - [Move releases into yearly folder](#toc3_2_) \n",
- " - [Create yearly listing page](#toc3_3_) \n",
- " - [Edit the yearly listing page](#toc3_4_) \n",
- " - [Retrieve moved releases](#toc3_5_) \n",
- " - [Add moved releases to listing page](#toc3_6_) \n",
+ "- [Rounding up the yearly releases](#toc3_) \n",
+ " - [Retrieve the yearly folder](#toc3_1_) \n",
+ " - [Create yearly listing page](#toc3_2_) \n",
+ " - [Edit the yearly listing page](#toc3_3_) \n",
+ " - [Retrieve yearly release pages](#toc3_4_) \n",
+ " - [Add releases to yearly listing page](#toc3_5_) \n",
"- [Updating sidebar and links](#toc4_) \n",
" - [Add yearly release folder to sidebar](#toc4_1_) \n",
- " - [Move year end marker](#toc4_2_) \n",
- " - [Fix broken filepaths](#toc4_3_) \n",
- " - [Retrieve relative paths](#toc4_4_) \n",
+ " - [Move year end marker](#toc4_2_) \n",
"- [Next steps](#toc5_) \n",
" - [Show files to commit](#toc5_1_) \n",
" - [Preview changes](#toc5_2_) \n",
@@ -95,7 +92,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -143,7 +140,7 @@
"metadata": {},
"outputs": [],
"source": [
- "yc.get_yearly_releases(year)"
+ "yc.get_yearly_releases(year);"
]
},
{
@@ -152,7 +149,7 @@
"source": [
"\n",
"\n",
- "## Creating the yearly folder "
+ "## Rounding up the yearly releases"
]
},
{
@@ -161,9 +158,9 @@
"source": [
"\n",
"\n",
- "### Create the yearly folder \n",
+ "### Retrieve the yearly folder \n",
"\n",
- "The following cell creates a new subdirectory in `~site/releases/` based on your specified year."
+ "The following cell locates the yearly subdirectory in `~site/releases/` based on your specified year so we can use the filepath in later functions."
]
},
{
@@ -172,7 +169,7 @@
"metadata": {},
"outputs": [],
"source": [
- "yearly_path = yc.create_year_folder(year)"
+ "yearly_path = yc.retrieve_year_folder(year)"
]
},
{
@@ -181,29 +178,11 @@
"source": [
"\n",
"\n",
- "### Move releases into yearly folder \n",
- "\n",
- "Once we have the folder available, your matching release folders will get moved into this new yearly subdirectory."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "yc.move_yearly_releases(yearly_path, yc.release_folders)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "\n",
"### Create yearly listing page \n",
"\n",
- "This cell copies the template from `~internal/templates/yearly-releases.qmd` and slots it into the new yearly folder as `{year}-releases.qmd` so we can begin building the yearly listings."
+ "This cell copies the template from `~internal/templates/yearly-releases.qmd` and slots it into the the yearly folder as `{year}-releases.qmd` so we can begin building the yearly listings.\n",
+ "\n",
+ "**It will also open up the newly created `{year}-releases.qmd` file for you so you don't have to go looking for it.**"
]
},
{
@@ -219,7 +198,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
+ "\n",
"\n",
"### Edit the yearly listing page \n",
"\n",
@@ -246,11 +225,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
+ "\n",
"\n",
- "### Retrieve moved releases \n",
+ "### Retrieve yearly release pages\n",
"\n",
- "This cell returns the `release-notes.qmd` filepaths for all the release folders we just moved into the yearly subdirectory."
+ "This cell returns the `release-notes.qmd` filepaths for all the release folders in our matching yearly subdirectory."
]
},
{
@@ -266,11 +245,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
+ "\n",
"\n",
- "### Add moved releases to listing page \n",
+ "### Add releases to yearly listing page \n",
"\n",
- "Next, we'll insert the moved release files into the listing for the yearly roundup page sorted by the release dates in descending order (newest first)."
+ "Next, we'll insert that year's release pages into the listing for the yearly roundup page sorted by the release dates in descending order (newest first)."
]
},
{
@@ -300,9 +279,9 @@
"\n",
"### Add yearly release folder to sidebar \n",
"\n",
- "Since we moved our releases for the specified year into their own subfolder, we'll need to update the sidebar in `_quarto.yml` to accomodate.\n",
+ "Now that we've created the yearly listing page, we need to update the sidebar in `_quarto.yml` to accomodate.\n",
"\n",
- "**This cell takes all the release filepaths we just moved into our yearly folder and shoves them into a `contents:` accordion menu with the new `{year}-.releases.qmd` listing page as the landing page.** \n"
+ "**This cell takes all the release filepaths matching our year and shoves them into a `contents:` accordion menu with the new `{year}-.releases.qmd` listing page as the landing page.** \n"
]
},
{
@@ -334,48 +313,6 @@
"yc.move_year_marker(year)"
]
},
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "\n",
- "### Fix broken filepaths \n",
- "\n",
- "This cell looks for absolute filepaths in `.qmd` and `.yml` files in `~site/` matching `releases/{year}-` and renames them `releases/{year}/{year}-` to accomodate for the releases we moved."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "yc.update_paths(year)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "\n",
- "### Retrieve relative paths \n",
- "\n",
- "This cell looks for relative paths (`../example.qmd`) in the `~site/releases/` folder that might need manual adjustment, such as in listings or any links that don't follow our proper `/root` convention but should. \n",
- "\n",
- "**You will ned to review these links and edit them if necessary to ensure that the filepaths are not broken after the move.**"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "yc.search_links(yearly_path)"
- ]
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -449,10 +386,7 @@
"**You may want to send a commit up to remote before you begin editing so you have a backup.**\n",
"\n",
"- [ ] Make sure that the new yearly accordion menu displays as expected in the sidebar under `About > Releases`.\n",
- "- [ ] Check in `_quarto.yml` that the `# CURRENT-YEAR-END-MARKER` was moved to above your rounded up releases for your specified year.\n",
- "- [ ] Double-check the files edited by `Fix broken filepaths` to ensure that the new links resolve correctly\n",
- "- [ ] Resolve any relative links found in `Retrieve relative paths` that were broken by the move. \n",
- "- [ ] Resolve any other links that might have been broken by the move by checking using `quarto render`. \n",
+ "- [ ] Check in `_quarto.yml` that the `# CURRENT-YEAR-END-MARKER` was moved to above your rounded up releases for your specified year. \n",
"- [ ] Review the summaries at the top of each release page to make sure they look good on the listing tiles.\n",
"- [ ] Make sure any relevant files are committed to remote in preparation for your PR!"
]
diff --git a/release-scripts/yearly_cleanup.py b/release-scripts/yearly_cleanup.py
index 8abbeb1d13..4ba85e5b08 100644
--- a/release-scripts/yearly_cleanup.py
+++ b/release-scripts/yearly_cleanup.py
@@ -3,6 +3,7 @@
import re
import shutil
from IPython import get_ipython
+import subprocess
ansi_escape = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
@@ -24,34 +25,54 @@ def get_year():
print(f"Rounding up releases for: {year}\n")
return year
-def create_year_folder(year):
+def retrieve_year_folder(year):
"""
- Creates a new directory in ../site/releases/ with the given year as the name.
+ Checks if a directory exists in ../site/releases/ with the given year as the name.
Args:
- year (str): The name of the directory to create.
+ year (str): The name of the directory to check.
Returns:
- str: The path to the new yearly directory.
+ str: The path to the yearly directory if it exists, or a message indicating it does not exist.
"""
- releases_dir = f"../site/releases/"
- yearly_path = f"../site/releases/{year}/"
- os.makedirs(releases_dir, exist_ok=True)
+ yearly_path = f"../site/releases/{year}/"
if os.path.exists(yearly_path):
- print(f"The directory '{yearly_path}' already exists")
+ print(f"The directory '{yearly_path}' exists")
+ return yearly_path
else:
- os.makedirs(yearly_path)
- print(f"Created folder: {yearly_path}\n")
+ print(f"The directory '{yearly_path}' does not exist and needs to be created")
+ return None
+
+# def create_year_folder(year):
+# """
+# Creates a new directory in ../site/releases/ with the given year as the name.
+
+# Args:
+# year (str): The name of the directory to create.
+
+# Returns:
+# str: The path to the new yearly directory.
+# """
+# releases_dir = f"../site/releases/"
+# yearly_path = f"../site/releases/{year}/"
+
+# os.makedirs(releases_dir, exist_ok=True)
+
+# if os.path.exists(yearly_path):
+# print(f"The directory '{yearly_path}' already exists")
+# else:
+# os.makedirs(yearly_path)
+# print(f"Created folder: {yearly_path}\n")
- return yearly_path
+# return yearly_path
release_folders = []
def get_yearly_releases(year):
"""
- Finds subdirectories in ../site/releases/ that begin with the specified year.
+ Finds subdirectories in ../site/releases/ that match the structure {year}/{year}-.
Args:
year (str): The year prefix to search for in subdirectory names.
@@ -59,56 +80,57 @@ def get_yearly_releases(year):
Returns:
list: A list of matching subdirectory names, sorted alphabetically.
"""
- global release_folders
+ global release_folders
releases_dir = "../site/releases/"
+ year_dir = os.path.join(releases_dir, year)
- if not os.path.exists(releases_dir):
- print(f"'{releases_dir}' does not exist")
- release_folders = []
+ if not os.path.exists(year_dir):
+ print(f"'{year_dir}' does not exist")
+ release_folders = []
return release_folders
- subdirs = [d for d in os.listdir(releases_dir) if os.path.isdir(os.path.join(releases_dir, d))]
- matching_subdirs = [os.path.join(releases_dir, d) for d in subdirs if d.startswith(f"{year}-")]
+ # Gather all subdirectories in the {year} directory
+ subdirs = [os.path.join(year_dir, d) for d in os.listdir(year_dir) if os.path.isdir(os.path.join(year_dir, d))]
+
+ # Filter subdirectories based on the year pattern
+ matching_subdirs = [d for d in subdirs if os.path.basename(d).startswith(f"{year}-")]
release_folders = sorted(matching_subdirs)
- if matching_subdirs:
- if get_ipython(): # Check if running in Jupyter Notebook
- print(f"Found {len(matching_subdirs)} release folders for year {year}:")
- else:
- print(f"Found {len(release_folders)} release folders for year {year}:\n" + "\n".join(release_folders))
+ if release_folders:
+ print(f"Found {len(release_folders)} release folders for year {year}:\n\n" + "\n".join(release_folders))
else:
print(f"No release folders found for year {year}")
return release_folders
-def move_yearly_releases(yearly_path, release_folders):
- """
- Moves all subdirectories and files within them from the release_folders list
- into the yearly_path directory.
-
- Args:
- yearly_path (str): The destination directory.
- release_folders (list): A list of subdirectories to move.
-
- Returns:
- None
- """
- if not release_folders:
- print("No release folders to move")
- return
-
- for folder in release_folders:
- destination = os.path.join(yearly_path, os.path.basename(folder))
-
- try:
- if os.path.exists(destination):
- print(f"Skipping: '{destination}' already exists")
- else:
- shutil.move(folder, destination)
- print(f"Moved: '{folder}' to '{destination}'")
- except Exception as e:
- print(f"Failed to move '{folder}' to '{destination}': {e}")
+# def move_yearly_releases(yearly_path, release_folders):
+# """
+# Moves all subdirectories and files within them from the release_folders list
+# into the yearly_path directory.
+
+# Args:
+# yearly_path (str): The destination directory.
+# release_folders (list): A list of subdirectories to move.
+
+# Returns:
+# None
+# """
+# if not release_folders:
+# print("No release folders to move")
+# return
+
+# for folder in release_folders:
+# destination = os.path.join(yearly_path, os.path.basename(folder))
+
+# try:
+# if os.path.exists(destination):
+# print(f"Skipping: '{destination}' already exists")
+# else:
+# shutil.move(folder, destination)
+# print(f"Moved: '{folder}' to '{destination}'")
+# except Exception as e:
+# print(f"Failed to move '{folder}' to '{destination}': {e}")
def copy_template(yearly_path, year):
"""
@@ -140,6 +162,11 @@ def copy_template(yearly_path, year):
shutil.copy(template_path, destination_file)
print(f"Copied '../internal/templates/yearly-releases.qmd' template to: '{destination_file}'")
+ try:
+ subprocess.run(["code", destination_file], check=True)
+ except Exception as e:
+ print(f"Error opening the file in VS Code: {e}")
+
return destination_file
except Exception as e:
@@ -344,7 +371,7 @@ def update_quarto_yaml(year):
if between_markers:
# Collect lines for the specified year
- if f"releases/{year}-" in line:
+ if f"releases/{year}/{year}-" in line:
year_contents.append(line)
else:
# Write out lines not belonging to the target year
@@ -412,7 +439,7 @@ def move_year_marker(year):
# If marker was removed but not reinserted, raise an error
if marker_removed and not marker_inserted:
raise ValueError(
- "The marker was removed but could not be reinserted above the target line. Ensure the target line exists."
+ "The marker was removed but could not be reinserted above the target line, ensure the target line exists"
)
# Remove the temporary file
@@ -421,101 +448,101 @@ def move_year_marker(year):
if marker_removed and marker_inserted:
print(f"Relocated # CURRENT-YEAR-END-MARKER in _quarto.yml from line {modified_lines['deleted_line']} to line {modified_lines['inserted_line']}")
elif not marker_removed:
- return "Marker was not found in the file."
+ return "Marker was not found in the file"
else:
- return "Marker could not be relocated."
-
-def update_paths(year):
- """
- Replaces occurrences of `releases/{year}-` with `releases/{year}/{year}-` in .qmd and .yml files.
-
- Args:
- year (str): Year to replace in the text.
- """
- site_dir = f"../site/"
- original_text = f"releases/{year}-"
- new_text = f"releases/{year}/{year}-"
-
- # List to track modified files
- modified_files = []
-
- # Walk through the directory and subdirectories
- for root, _, files in os.walk(site_dir):
- for file in files:
- if file.endswith(".qmd") or file.endswith(".yml"):
- file_path = os.path.join(root, file)
- with open(file_path, "r", encoding="utf-8") as f:
- content = f.readlines()
-
- # Track lines updated
- updated_lines = []
-
- # Replace the text
- updated_content = []
- for line_num, line in enumerate(content, start=1):
- updated_line = re.sub(original_text.format(year=year), new_text.format(year=year), line)
- updated_content.append(updated_line)
- if line != updated_line:
- updated_lines.append((line_num, line.strip(), updated_line.strip()))
-
- # Write back to the file only if changes were made
- if updated_lines:
- with open(file_path, "w", encoding="utf-8") as f:
- f.writelines(updated_content)
- modified_files.append((file_path, updated_lines))
-
- # Check if any files were modified
- if not modified_files:
- print("No absolute filepaths replaced")
- return
-
- # Print modified files and lines line by line
- for file_path, updates in modified_files:
- print(f"Updated: {file_path}")
- for line_num, before, after in updates:
- print(f" Line {line_num}:\n Before: {before}\n After: {after}")
- print()
-
-def search_links(yearly_path):
- """
- Searches for files in a specified directory and looks for a specific text in them.
- Prints the file path, line number, and the line containing the text.
- Also provides a summary of the number of matching files and lines found.
-
- Parameters:
- - yearly_path (str): The base directory to search in.
- """
- search_dir = f"{yearly_path}"
- search_text = "../"
- matching_files = 0
- total_lines_found = 0
-
- print("Searching for relative links in moved release notes that may need adjusting...\n")
-
- for root, _, files in os.walk(search_dir):
- for file in files:
- file_path = os.path.join(root, file)
- file_has_match = False
- matches = [] # To store matching lines for this file
- try:
- with open(file_path, 'r', encoding='utf-8') as f:
- for line_number, line in enumerate(f, start=1):
- if search_text in line:
- total_lines_found += 1
- if not file_has_match:
- file_has_match = True
- matching_files += 1
- matches.append(f"- Line {line_number}: {line.strip()}")
- except (UnicodeDecodeError, FileNotFoundError):
- # Skip files that cannot be opened or read
- continue
-
- if matches:
- print(f"File: {file_path}")
- print("\n".join(matches))
- print() # Add an extra empty line between files
-
- print(f"Search completed: {matching_files} files matched, {total_lines_found} matching lines found\n")
+ return "Marker could not be relocated"
+
+# def update_paths(year):
+# """
+# Replaces occurrences of `releases/{year}-` with `releases/{year}/{year}-` in .qmd and .yml files.
+
+# Args:
+# year (str): Year to replace in the text.
+# """
+# site_dir = f"../site/"
+# original_text = f"releases/{year}-"
+# new_text = f"releases/{year}/{year}-"
+
+# # List to track modified files
+# modified_files = []
+
+# # Walk through the directory and subdirectories
+# for root, _, files in os.walk(site_dir):
+# for file in files:
+# if file.endswith(".qmd") or file.endswith(".yml"):
+# file_path = os.path.join(root, file)
+# with open(file_path, "r", encoding="utf-8") as f:
+# content = f.readlines()
+
+# # Track lines updated
+# updated_lines = []
+
+# # Replace the text
+# updated_content = []
+# for line_num, line in enumerate(content, start=1):
+# updated_line = re.sub(original_text.format(year=year), new_text.format(year=year), line)
+# updated_content.append(updated_line)
+# if line != updated_line:
+# updated_lines.append((line_num, line.strip(), updated_line.strip()))
+
+# # Write back to the file only if changes were made
+# if updated_lines:
+# with open(file_path, "w", encoding="utf-8") as f:
+# f.writelines(updated_content)
+# modified_files.append((file_path, updated_lines))
+
+# # Check if any files were modified
+# if not modified_files:
+# print("No absolute filepaths replaced")
+# return
+
+# # Print modified files and lines line by line
+# for file_path, updates in modified_files:
+# print(f"Updated: {file_path}")
+# for line_num, before, after in updates:
+# print(f" Line {line_num}:\n Before: {before}\n After: {after}")
+# print()
+
+# def search_links(yearly_path):
+# """
+# Searches for files in a specified directory and looks for a specific text in them.
+# Prints the file path, line number, and the line containing the text.
+# Also provides a summary of the number of matching files and lines found.
+
+# Parameters:
+# - yearly_path (str): The base directory to search in.
+# """
+# search_dir = f"{yearly_path}"
+# search_text = "../"
+# matching_files = 0
+# total_lines_found = 0
+
+# print("Searching for relative links in moved release notes that may need adjusting ...\n")
+
+# for root, _, files in os.walk(search_dir):
+# for file in files:
+# file_path = os.path.join(root, file)
+# file_has_match = False
+# matches = [] # To store matching lines for this file
+# try:
+# with open(file_path, 'r', encoding='utf-8') as f:
+# for line_number, line in enumerate(f, start=1):
+# if search_text in line:
+# total_lines_found += 1
+# if not file_has_match:
+# file_has_match = True
+# matching_files += 1
+# matches.append(f"- Line {line_number}: {line.strip()}")
+# except (UnicodeDecodeError, FileNotFoundError):
+# # Skip files that cannot be opened or read
+# continue
+
+# if matches:
+# print(f"File: {file_path}")
+# print("\n".join(matches))
+# print() # Add an extra empty line between files
+
+# print(f"Search completed: {matching_files} files matched, {total_lines_found} matching lines found\n")
def main():
@@ -525,13 +552,10 @@ def main():
year = get_year()
print()
- release_folders = get_yearly_releases(year)
+ get_yearly_releases(year)
print()
- yearly_path = create_year_folder(year)
- print()
-
- move_yearly_releases(yearly_path, release_folders)
+ yearly_path = retrieve_year_folder(year)
print()
yearly_release = copy_template(yearly_path, year)
@@ -554,11 +578,5 @@ def main():
move_year_marker(year)
print()
- update_paths(year)
- print()
-
- search_links(yearly_path)
- print()
-
if __name__ == "__main__":
main()
\ No newline at end of file
diff --git a/site/Makefile b/site/Makefile
index b8921a7787..7ac934a36e 100644
--- a/site/Makefile
+++ b/site/Makefile
@@ -88,6 +88,7 @@ get-source: clean clone notebooks python-docs test-descriptions
docs-site: get-source
@echo "\nRendering the static HTML site ..."
quarto render --profile production
+ @$(MAKE) execute PROFILE=exe-prod
# Deployment to https://docs-demo.vm.validmind.ai/
deploy-demo:
diff --git a/site/_quarto.yml b/site/_quarto.yml
index 35616eef4c..04e111ed8d 100644
--- a/site/_quarto.yml
+++ b/site/_quarto.yml
@@ -264,6 +264,7 @@ website:
- guide/model-inventory/register-models-in-inventory.qmd
- guide/model-inventory/customize-model-inventory-layout.qmd
- guide/model-inventory/edit-model-inventory-fields.qmd
+ - guide/model-inventory/customize-model-overview-page.qmd
- file: guide/model-inventory/managing-model-inventory.qmd
contents:
- guide/model-inventory/configure-model-interdependencies.qmd
diff --git a/site/guide/model-inventory/customize-model-inventory-layout.qmd b/site/guide/model-inventory/customize-model-inventory-layout.qmd
index 46e574b4b1..33293a82a5 100644
--- a/site/guide/model-inventory/customize-model-inventory-layout.qmd
+++ b/site/guide/model-inventory/customize-model-inventory-layout.qmd
@@ -81,8 +81,8 @@ Deletion of saved views is permanent.
## What's next
-- [Register models in the inventory](register-models-in-inventory.qmd)
- [Manage model inventory fields](manage-model-inventory-fields.qmd)
+- [Customize model overview page](customize-model-overview-page.qmd)
diff --git a/site/guide/model-inventory/customize-model-overview-page.qmd b/site/guide/model-inventory/customize-model-overview-page.qmd
new file mode 100644
index 0000000000..01e0c2b9e0
--- /dev/null
+++ b/site/guide/model-inventory/customize-model-overview-page.qmd
@@ -0,0 +1,57 @@
+---
+title: "Customize model overview page"
+date: last-modified
+---
+
+Configure what and how model inventory fields appear when you pull up a model's details in the inventory.
+
+:::{.callout title="Changes are automatically saved to your account and do not affect other users."}
+Customizations will apply to all models in your inventory.
+
+:::
+
+::: {.attn}
+
+## Prerequisites
+
+- [x] {{< var link.login >}}
+- [x] There are models registered in the model inventory.[^1]
+
+:::
+
+## Show or hide fields
+
+::: {.callout title="Only custom inventory fields can be shown or hidden."}
+Default fields will always appear on your model overview pages and are represented by by faded cells. Their positions cannot be adjusted.
+:::
+
+1. In the left sidebar, click **{{< fa cubes >}} Inventory**.
+
+2. Select a model or find your model by applying a filter or searching for it.[^2]
+
+3. Click on **{{< fa table-cells-large >}} Customize Layout**.
+
+4. On the Customize Section Layout modal that appears, configure the model inventory fields[^3] that will appear:
+
+ - Toggle optional model inventory fields on or off to show or hide them from view.
+ - Click and hold a field to drag-and-drop to rearrange the order of fields. Fields can be moved from the Side Column to the Main Column and vice versa.[^4]
+
+ To narrow down your list of fields, search via the **{{< fa filter >}} Filter** bar.
+
+5. Click **Save Layout** to apply your changes to all model overview pages.
+
+## What's next
+
+- [Edit model inventory fields](edit-model-inventory-fields.qmd)
+- [Manage model inventory fields](manage-model-inventory-fields.qmd)
+
+
+
+
+[^1]: [Register models in the inventory](register-models-in-inventory.qmd)
+
+[^2]: [Working with the model inventory](/guide/model-inventory/working-with-model-inventory.qmd#search-filter-and-sort-models)
+
+[^3]: [Manage model inventory fields](manage-model-inventory-fields.qmd#inventory-field-types)
+
+[^4]: `Attachments` or `Long Text` type fields can only be placed in the Main Column.
diff --git a/site/guide/model-inventory/edit-model-inventory-fields.qmd b/site/guide/model-inventory/edit-model-inventory-fields.qmd
index 44c9d929cc..04c941ac8e 100644
--- a/site/guide/model-inventory/edit-model-inventory-fields.qmd
+++ b/site/guide/model-inventory/edit-model-inventory-fields.qmd
@@ -48,8 +48,8 @@ To work with attachments on models, first add an attachment inventory field.[^4]
## What's next
-- [Register models in the inventory](register-models-in-inventory.qmd)
- [Manage model inventory fields](manage-model-inventory-fields.qmd)
+- [Customize model overview page](customize-model-overview-page.qmd)
diff --git a/site/guide/model-inventory/manage-model-inventory-fields.qmd b/site/guide/model-inventory/manage-model-inventory-fields.qmd
index 7a56defbc0..7146567538 100644
--- a/site/guide/model-inventory/manage-model-inventory-fields.qmd
+++ b/site/guide/model-inventory/manage-model-inventory-fields.qmd
@@ -62,13 +62,11 @@ Number
:::: {.flex .flex-wrap .justify-around}
::: {.w-50-ns}
-
{fig-alt="A screenshot showing a simple number field type" .screenshot group="number"}
:::
::: {.w-40-ns}
-
{fig-alt="A screenshot showing a currency number field type" .screenshot group="number"}
:::
@@ -79,10 +77,12 @@ URL
: Text value in valid URL format.
Date
-: Date value in `yyyy-mm-dd` format.
+: - Date value in `yyyy-mm-dd` format.
+- Selection is in the current user's timezone; other users viewing this field will see the value automatically in their timezone.
Date Time
-: Date value in `yyyy-mm-dd, 24hr` format.
+: - Date value in `yyyy-mm-dd, 24hr` format.
+- Selection is in the current user's timezone; other users viewing this field will see the value automatically in their timezone.
Email
: Text value in valid email (`user@domain.com`) format.
diff --git a/site/guide/model-inventory/register-models-in-inventory.qmd b/site/guide/model-inventory/register-models-in-inventory.qmd
index 7bd62d21dd..4a103e1e51 100644
--- a/site/guide/model-inventory/register-models-in-inventory.qmd
+++ b/site/guide/model-inventory/register-models-in-inventory.qmd
@@ -61,8 +61,8 @@ If additional fields are required on model registration for your organization:
## What's next
-* [Edit model inventory fields](edit-model-inventory-fields.qmd)
-* [Generate documentation for your model](/get-started/platform/generate-documentation-for-your-model.qmd)
+- [Edit model inventory fields](edit-model-inventory-fields.qmd)
+- [Generate documentation for your model](/get-started/platform/generate-documentation-for-your-model.qmd)
diff --git a/site/guide/model-inventory/working-with-model-inventory.qmd b/site/guide/model-inventory/working-with-model-inventory.qmd
index 9de8e68d18..431979d8bf 100644
--- a/site/guide/model-inventory/working-with-model-inventory.qmd
+++ b/site/guide/model-inventory/working-with-model-inventory.qmd
@@ -5,12 +5,14 @@ listing:
- id: whats-next-listing
type: grid
max-description-length: 250
+ grid-columns: 2
sort: false
fields: [title, description]
contents:
- register-models-in-inventory.qmd
- customize-model-inventory-layout.qmd
- edit-model-inventory-fields.qmd
+ - customize-model-overview-page.qmd
aliases:
- ../working-with-model-inventory.html
---
diff --git a/site/guide/model-workflows/_configure-workflow-steps.qmd b/site/guide/model-workflows/_configure-workflow-steps.qmd
index 2da301c6fa..cbe65d5918 100644
--- a/site/guide/model-workflows/_configure-workflow-steps.qmd
+++ b/site/guide/model-workflows/_configure-workflow-steps.qmd
@@ -7,10 +7,10 @@ To add or edit workflow steps:
1. Click on **Inventory Model**:
- - To add a step, drag and drop a new step onto the canvas. Hover over the step until the **{{< fa ellipsis-vertical >}}** menu appears, then click on it and select **{{< fa gear >}} Configure**.
- - On the new step, click **{{< fa gear >}} Configure**.
+ - To add a step, drag and drop a new step onto the canvas.
+ - Double-click the new step to open up the configuration modal.
-1. After you're finished with step configuration, click **Save** to apply your changes before closing the configuration panel with **{{< fa x >}}**.
+1. After you're finished with step configuration, click **Update Step** to apply your changes before closing the configuration panel with **{{< fa x >}}**.
{fig-alt="A gif workflow step configuration" .screenshot}
@@ -31,10 +31,10 @@ To add or edit workflow steps:
1. Click on **Inventory Model**:
- - To add a step, drag and drop a new step onto the canvas. Hover over the step until the **{{< fa ellipsis-vertical >}}** menu appears, then click on it and select **{{< fa gear >}} Configure**.
- - On the new step, click **{{< fa gear >}} Configure**.
+ - To add a step, drag and drop a new step onto the canvas.
+ - Double-click the new step to open up the configuration modal.
-1. After you're finished with step configuration, click **Save** to apply your changes before closing the configuration panel with **{{< fa x >}}**.
+1. After you're finished with step configuration, click **Update Step** to apply your changes before closing the configuration panel with **{{< fa x >}}**.
1. After you've configured a step, you can then link your workflow together.
diff --git a/site/guide/model-workflows/_link-workflow-steps.qmd b/site/guide/model-workflows/_link-workflow-steps.qmd
index 6f61ad2ed5..19c3311426 100644
--- a/site/guide/model-workflows/_link-workflow-steps.qmd
+++ b/site/guide/model-workflows/_link-workflow-steps.qmd
@@ -7,13 +7,17 @@ To initiate the beginning of your workflow:^[After you’ve [configured your wor
### Link steps together
+::: {.callout}
+Hover over a workflow step to view an animation of the steps connecting to and from that step.
+:::
+
To link subsequent steps together:
1. Click **{{< fa circle >}}** above or below the earlier step and drag it to connect to the top **{{< fa circle >}}** on the subsequent step.
You're also able to link several different steps together at various points in the workflow, including stages that may circle back to previous steps:
- {fig-alt="A screenshot showing an example of multiple steps linked together at various points in the default Inventory Model workflow" .screenshot}
+ {fig-alt="An animated gif showing an example of multiple steps linked together at various points in the default Inventory Model workflow" .screenshot}
1. When you are finished, click **Save Workflow** to apply your changes.
@@ -34,7 +38,7 @@ To link subsequent steps together:
You're also able to link several different steps together at various points in the workflow, including stages that may circle back to previous steps:
- {fig-alt="A screenshot showing an example of multiple steps linked together at various points in the default Inventory Model workflow" .screenshot}
+ {fig-alt="An animated gif showing an example of multiple steps linked together at various points in the default Inventory Model workflow" .screenshot}
1. When you are finished, click **Save Workflow** to apply your changes.
diff --git a/site/guide/model-workflows/_model-workflows-see.qmd b/site/guide/model-workflows/_model-workflows-see.qmd
index c932e8a958..8fc77b1d9a 100644
--- a/site/guide/model-workflows/_model-workflows-see.qmd
+++ b/site/guide/model-workflows/_model-workflows-see.qmd
@@ -8,7 +8,14 @@
- Click **{{< fa arrow-right-arrow-left >}} See Workflow** to open the detailed workflow associated with that model.
- The current workflow state will be highlighted on this detail view.
- {width=85% fig-alt="A summary view of example workflow steps for a model" .screenshot}
+ {fig-alt="A summary view of example workflow steps for a model" .screenshot}
+
+
+
+::: {.callout}
+Hover over a workflow step to view an animation of the steps connecting to and from that step.
+
+:::
While your lifecycle statuses and workflows are custom to your organization, some examples are:
diff --git a/site/guide/model-workflows/approval-group-setup.png b/site/guide/model-workflows/approval-group-setup.png
index ba6ea4f86b..7d448cac37 100644
Binary files a/site/guide/model-workflows/approval-group-setup.png and b/site/guide/model-workflows/approval-group-setup.png differ
diff --git a/site/guide/model-workflows/configure-approval-step.png b/site/guide/model-workflows/configure-approval-step.png
new file mode 100644
index 0000000000..e1deadde1b
Binary files /dev/null and b/site/guide/model-workflows/configure-approval-step.png differ
diff --git a/site/guide/model-workflows/configure-steps.gif b/site/guide/model-workflows/configure-steps.gif
index 50b0ab4cb2..de48d82df3 100644
Binary files a/site/guide/model-workflows/configure-steps.gif and b/site/guide/model-workflows/configure-steps.gif differ
diff --git a/site/guide/model-workflows/configure-user-action.png b/site/guide/model-workflows/configure-user-action.png
index 94a6e69fa1..eb162b4dbc 100644
Binary files a/site/guide/model-workflows/configure-user-action.png and b/site/guide/model-workflows/configure-user-action.png differ
diff --git a/site/guide/model-workflows/customize-model-lifecycle-statuses.qmd b/site/guide/model-workflows/customize-model-lifecycle-statuses.qmd
index 20c2085363..6d91dac4e6 100644
--- a/site/guide/model-workflows/customize-model-lifecycle-statuses.qmd
+++ b/site/guide/model-workflows/customize-model-lifecycle-statuses.qmd
@@ -29,7 +29,7 @@ Model lifecycle statuses are manipulated via workflow transitions and are used t
- To add a status, click **{{< fa plus >}} Add New Model Lifecycle Status**.
- To edit a status, click on the status itself.
-3. On the status detail popup that appears:
+3. On the Add Model Lifecycle Status modal that appears:
a. Provide a status **[name]{.smallcaps}**
b. Provide a status **[description]{.smallcaps}**
@@ -45,7 +45,7 @@ Model lifecycle statuses are manipulated via workflow transitions and are used t
1. In the left sidebar, click **{{< fa gear >}} Settings**.
-2. Under Workplace Settings, select **Statuses**.
+2. Under Workplace Settings, select **Model Lifecycle Statuses**.
3. Hover over the status you'd like to delete, and click **{{< fa trash-can >}} Delete**.
diff --git a/site/guide/model-workflows/example-condition-branch.png b/site/guide/model-workflows/example-condition-branch.png
index 07319044fd..67d9bc8aa4 100644
Binary files a/site/guide/model-workflows/example-condition-branch.png and b/site/guide/model-workflows/example-condition-branch.png differ
diff --git a/site/guide/model-workflows/legal-team-approval.png b/site/guide/model-workflows/legal-team-approval.png
index a3e26d9fbb..f8e07855f9 100644
Binary files a/site/guide/model-workflows/legal-team-approval.png and b/site/guide/model-workflows/legal-team-approval.png differ
diff --git a/site/guide/model-workflows/linked-workflow.gif b/site/guide/model-workflows/linked-workflow.gif
new file mode 100644
index 0000000000..a9a9cdfabf
Binary files /dev/null and b/site/guide/model-workflows/linked-workflow.gif differ
diff --git a/site/guide/model-workflows/linked-workflow.png b/site/guide/model-workflows/linked-workflow.png
deleted file mode 100644
index 67e89d9a76..0000000000
Binary files a/site/guide/model-workflows/linked-workflow.png and /dev/null differ
diff --git a/site/guide/model-workflows/model-workflow.png b/site/guide/model-workflows/model-workflow.png
index 6abeee406f..95ab9ac4ef 100644
Binary files a/site/guide/model-workflows/model-workflow.png and b/site/guide/model-workflows/model-workflow.png differ
diff --git a/site/guide/model-workflows/reset-workflow.gif b/site/guide/model-workflows/reset-workflow.gif
new file mode 100644
index 0000000000..17f186546e
Binary files /dev/null and b/site/guide/model-workflows/reset-workflow.gif differ
diff --git a/site/guide/model-workflows/see-workflow.gif b/site/guide/model-workflows/see-workflow.gif
index 9da5d9d260..02ec831865 100644
Binary files a/site/guide/model-workflows/see-workflow.gif and b/site/guide/model-workflows/see-workflow.gif differ
diff --git a/site/guide/model-workflows/set-up-model-workflows.qmd b/site/guide/model-workflows/set-up-model-workflows.qmd
index d6f6125eb8..bd7d4826a1 100644
--- a/site/guide/model-workflows/set-up-model-workflows.qmd
+++ b/site/guide/model-workflows/set-up-model-workflows.qmd
@@ -125,21 +125,18 @@ Please note that roles or users must be assigned to the **Approval Group** field
| [approval message]{.smallcaps} | When your resource reaches this approval step, the users in the selected group will recieve the following message. |
: **Approval Group** step configuration {.hover tbl-colwidths="[35,65]"}
-
-{fig-alt="A screenshot showing the approval message shown to the APPROVAL GROUP" .screenshot group="approval"}
-
:::: {.flex .flex-wrap .justify-around}
::: {.w-50-ns}
-
-{fig-alt="A screenshot showing an APPROVAL GROUP step configuration with a inventory field selection of Approval Users" .screenshot group="approval"}
+{fig-alt="A screenshot showing an APPROVAL GROUP step configuration with a User Roles selection of Validator" .screenshot group="approval"}
:::
::: {.w-40-ns}
+{fig-alt="A screenshot showing the setup for the Approval Message shown to the APPROVAL GROUP of User Roles — Validator" .screenshot group="approval"}
Example
-: A message shown to the user type inventory field `Approval Group` users requesting approval of model documentation.
+: A message shown to the User Roles — Validator requesting review of a model for compliance.
:::
@@ -155,8 +152,8 @@ Workflows cannot be saved until condition branches are connected to other steps.
To configure a condition branch:
-1. On the Configure Condition Branch module, click **+ Add Branch**.
-2. Enter in the **[name]{.smallcaps}** and designate the **[conditions]{.smallcaps}**[^12] that apply to this path.
+1. On the Configure Condition Branch modal, click **+ Add Branch**.
+2. Enter in the **[path name]{.smallcaps}** and designate the **[conditions]{.smallcaps}**[^12] that apply to this path.
3. Continue with steps 1 and 2 until your conditional branch logic is complete.
To remove a path, click **{{< fa ellipsis-vertical >}}** and select **{{< fa trash-can >}} Remove Path**.
@@ -167,7 +164,7 @@ To configure a condition branch:
For example, if you wanted your models where the field `GenAI Model` is set to `true` to undergo a special legal approval process:
- First, you'd set up a Condition Branch path to look for instances where `GenAI Model` is set to `true`.
-- Then, you would add an Approval step[^14] that requests a review of the model from the User group `Legal Team`.
+- Then, you would add an Approval step[^14] that requests a review of the model from the User Roles — `Legal Team`.
- Finally, configure the `default` path to bypass this special approval.
:::: {.flex .flex-wrap .justify-around}
@@ -178,13 +175,34 @@ For example, if you wanted your models where the field `GenAI Model` is set to `
:::
::: {.w-50-ns}
-{fig-alt="Screenshot showing the Legal team Approval step configuration" .screenshot group="condition"}
+{fig-alt="Screenshot showing the Legal Team Approval step configuration" .screenshot group="condition"}
:::
::::
-{fig-alt="A screenshot showing an example Condition Branch where GenAI models require special approval from the User group Legal Team" .screenshot group="condition"}
+::: {.column-margin}
+{fig-alt="A screenshot showing an example Condition Branch where GenAI models require special approval from the User Roles — Legal Team" .screenshot group="condition"}
+
+:::
+
+#### Wait
+
+- Creates a time condition for displaying next available action.
+- Used to enforce a time delay or a calendar date milestone.
+
+::: {.callout title="Time stamp configuration is in the current user's timezone."}
+Other users viewing those fields or the workflow will see the value automatically in their timezone.
+:::
+
+To configure a wait step, select when you would like to [resume workflow]{.smallcaps}:
+
+| Option | Required field | Description |
+|---:|---|---|
+| After Time Interval | [wait duration]{.smallcaps} | Wait for a set amount of time in minutes, hours, or days. Applies to all models under the workflow. |
+| At Specified Date | [wait until]{.smallcaps} | Wait until a specific timestamp. Applies to all models under the workflow. If the milestone date inputted is in the past, the next workflow step will display immediately. |
+| At Specified Date on Model Field | [model field]{.smallcaps}[^15] | Wait until a specific timestamp as defined by a valid `Date` or `Date Time` type model inventory field on a per model basis. If the selected field is empty[^16] or the milestone date inputted is in the past, the next workflow step will display immediately. |
+: **Wait** step configuration {.hover tbl-colwidths="[30,15,45]"}
### Add conditional requirements
@@ -195,10 +213,10 @@ Conditional requirements can be configured for all four available step types:
| Status Change | Under **[when these conditions are met]{.smallcaps}**, you are able to set both `AND` and `OR` conditions. |
| User Action | Under **[display action button when]{.smallcaps}**, you are able to set both `AND` and `OR` conditions. |
| Approval | Under **[threshold]{.smallcaps}**, you are able to set the minimum percentage of approvers required for the resource to be approved. |
-| Condition Branch | Under each branch's **[conditions]{.smallcaps}**, you're able to designate the conditions that apply to that path. |
+| Condition Branch | Under each branch's **[conditions]{.smallcaps}**, you're able to designate the `AND` and `OR` conditions that apply to that path. |
: Step type conditional options {.hover tbl-colwidths="[20,80]"}
-For Status Change[^15], User Action[^16], and Condition Branch[^17] conditions, you're able to add a single independent **Rule** or a linked condition **Group**. These rules and groups can be nested if desired:
+For Status Change[^17], User Action[^18], and Condition Branch[^19] conditions, you're able to add a single independent **Rule** or a linked condition **Group**. These rules and groups can be nested if desired:
- Click **{{< fa plus >}} Rule** to add an independent rule.
- Click **{{< fa plus >}} Group** to add a linked group of rules that all must be true to qualify.
@@ -210,16 +228,19 @@ For Status Change[^15], User Action[^16], and Condition Branch[^17] conditions,
#### Link approval steps
Approval steps need to be subsequently linked to both a [Rejected]{.bubble .red .red-bg} and an [Approved]{.bubble .green .green-bg} Status Change step:
-1. First, configure an **Approval** step.[^18]
+1. First, configure an **Approval** step.[^20]
-2. Then, drag two **Status Change** steps onto the canvas:[^19]
+2. Then, drag two **Status Change** steps onto the canvas:[^21]
- Assign a `Rejected` status to one in the **Set Document Status** field.
- Assign an `Approved` status to the other in the **Set Document Status** field.
3. Connect the **Approval** step to the [Rejected]{.bubble .red .red-bg} and [Approved]{.bubble .green .green-bg} **Status Change** steps with the red and green **{{< fa circle >}}** respectively by dragging from the colored **{{< fa circle >}}** to the top **{{< fa circle >}}** of the subsequent step.
-{fig-alt="A screenshot showing linked REJECTED and APPROVED Status Change steps" .screenshot}
+::: {.column-margin}
+{fig-alt="A screenshot showing linked REJECTED and APPROVED Status Change steps" .screenshot}
+
+:::
## Delete workflow steps
@@ -277,15 +298,19 @@ Approval steps need to be subsequently linked to both a [Rejected]{.bubble .red
[^14]: [Approval](#approval) steps
-[^15]: [Status Change](#status-change) steps
+[^15]: [Manage model inventory fields](/guide/model-inventory/manage-model-inventory-fields.qmd#inventory-field-types)
+
+[^16]: Make model inventory fields **[required on registration]{.smallcaps}** to ensure necessary fields have valid values.
+
+[^17]: [Status Change](#status-change) steps
-[^16]: [User Action](#user-action) steps
+[^18]: [User Action](#user-action) steps
-[^17]: [Condition Branch](#condition-branch) steps
+[^19]: [Condition Branch](#condition-branch) steps
-[^18]:
+[^20]:
- [Configure workflow steps](#configure-workflow-steps)
- [Approval](#approval) steps
-[^19]: [Status Change](#status-change) steps
+[^21]: [Status Change](#status-change) steps
diff --git a/site/guide/model-workflows/working-with-model-workflows.qmd b/site/guide/model-workflows/working-with-model-workflows.qmd
index db88ac406e..7455792a19 100644
--- a/site/guide/model-workflows/working-with-model-workflows.qmd
+++ b/site/guide/model-workflows/working-with-model-workflows.qmd
@@ -35,24 +35,7 @@ To review the overall workflow status for a model:
{{< include _model-workflows-see.qmd >}}
-{fig-alt="A gif showing the detailed workflow under the MODEL STATUS section" .screenshot}
-
-
-
-
+{fig-alt="A gif showing the detailed workflow under the MODEL STATUS section" .screenshot width=90%}
## Transition workflow statuses
@@ -66,22 +49,7 @@ To transition the overall workflow status for a model:
{{< include _model-workflows-transition.qmd >}}
-{fig-alt="A gif showing transitioning a workflow status under the ACTIONS section" .screenshot}
-
-
+{fig-alt="A gif showing transitioning a workflow status under the ACTIONS section" .screenshot width=90%}
### Reset your model workflow
@@ -97,6 +65,7 @@ If you need to reset your model's workflow to the beginning:
After you confirm, that model's workflow will be returned to its initial state.
+{fig-alt="A gif showing resetting a workflow to its initial state" .screenshot width=90%}
## What's next
diff --git a/site/releases/2023/2023-aug-15/highlights.qmd b/site/releases/2023/2023-aug-15/highlights.qmd
index faf0692ebf..098b632895 100644
--- a/site/releases/2023/2023-aug-15/highlights.qmd
+++ b/site/releases/2023/2023-aug-15/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "August 15, 2023"
+aliases:
+ - ../../2023-aug-15/highlights.html
---
This release includes a number of improvements for the developer experience when using the {{< var validmind.developer >}}, along with a visual redesign of the {{< var validmind.platform >}}.
diff --git a/site/releases/2023/2023-dec-13/highlights.qmd b/site/releases/2023/2023-dec-13/highlights.qmd
index d50dc6f837..45f602b09f 100644
--- a/site/releases/2023/2023-dec-13/highlights.qmd
+++ b/site/releases/2023/2023-dec-13/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "December 13, 2023"
+aliases:
+ - ../../2023-dec-13/highlights.html
---
::: {.highlights}
diff --git a/site/releases/2023/2023-nov-09/highlights.qmd b/site/releases/2023/2023-nov-09/highlights.qmd
index af193be388..e4fb70ebb7 100644
--- a/site/releases/2023/2023-nov-09/highlights.qmd
+++ b/site/releases/2023/2023-nov-09/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "November 9, 2023"
+aliases:
+ - ../../2023-nov-09/highlights.html
---
This release introduces support for several new models, a new user onboarding guide and other {{< var validmind.platform >}} enhancements, and improved test descriptions in our user-facing documentation.
diff --git a/site/releases/2023/2023-oct-25/highlights.qmd b/site/releases/2023/2023-oct-25/highlights.qmd
index e110bf243c..89c76d9944 100644
--- a/site/releases/2023/2023-oct-25/highlights.qmd
+++ b/site/releases/2023/2023-oct-25/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "October 25, 2023"
+aliases:
+ - ../../2023-oct-25/highlights.html
---
We've introduced new features to the {{< var vm.platform >}} that enable you to remove blocks of content from documentation and work with your settings more effectively.
diff --git a/site/releases/2023/2023-sep-27/highlights.qmd b/site/releases/2023/2023-sep-27/highlights.qmd
index 80ef14cdc6..c1eca18455 100644
--- a/site/releases/2023/2023-sep-27/highlights.qmd
+++ b/site/releases/2023/2023-sep-27/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "September 27, 2023"
+aliases:
+ - ../../2023-sep-27/highlights.html
listing:
id: beta-announcement
type: grid
diff --git a/site/releases/2023/release-notes-2023-jul-24.qmd b/site/releases/2023/release-notes-2023-jul-24.qmd
index bd906bf1bd..10be22b7eb 100644
--- a/site/releases/2023/release-notes-2023-jul-24.qmd
+++ b/site/releases/2023/release-notes-2023-jul-24.qmd
@@ -1,5 +1,7 @@
---
title: "July 24, 2023"
+aliases:
+ - ../release-notes-2023-jul-24.html
---
This release improves the developer experience within the {{< var validmind.developer >}} and introduces an updated notebook to demonstrate support for NLP models, now using CatBoost for greater performance.
diff --git a/site/releases/2023/release-notes-2023-jun-22.qmd b/site/releases/2023/release-notes-2023-jun-22.qmd
index 96b2f8113c..ab13a8e17d 100644
--- a/site/releases/2023/release-notes-2023-jun-22.qmd
+++ b/site/releases/2023/release-notes-2023-jun-22.qmd
@@ -1,5 +1,7 @@
---
title: "June 22, 2023"
+aliases:
+ - ../release-notes-2023-jun-22.html
---
This release includes a number of major enhancements to the {{< var validmind.developer >}} that will make it easier for users to edit templates and add custom tests that can be reused across templates.
diff --git a/site/releases/2023/release-notes-2023-may-30.qmd b/site/releases/2023/release-notes-2023-may-30.qmd
index 6b93b50834..c13b6f8af2 100644
--- a/site/releases/2023/release-notes-2023-may-30.qmd
+++ b/site/releases/2023/release-notes-2023-may-30.qmd
@@ -1,5 +1,7 @@
---
title: "May 30, 2023"
+aliases:
+ - ../release-notes-2023-may-30.html
---
This release includes enhanced plots with the Plotly package within the {{< var validmind.developer >}}, as well as support for export of model documentation to Word documents from the {{< var validmind.platform >}}.
diff --git a/site/releases/2024/2024-aug-13/release-notes.qmd b/site/releases/2024/2024-aug-13/release-notes.qmd
index 658ba432e0..0c378c9f36 100644
--- a/site/releases/2024/2024-aug-13/release-notes.qmd
+++ b/site/releases/2024/2024-aug-13/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "August 13, 2024"
+aliases:
+ - ../../2024-aug-13/release-notes.html
---
diff --git a/site/releases/2024/2024-dec-06/release-notes.qmd b/site/releases/2024/2024-dec-06/release-notes.qmd
index 19d14be456..1244b08eba 100644
--- a/site/releases/2024/2024-dec-06/release-notes.qmd
+++ b/site/releases/2024/2024-dec-06/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "December 6, 2024"
+aliases:
+ - ../../2024-dec-06/release-notes.html
filters:
- tachyons
- preview
diff --git a/site/releases/2024/2024-dec-24/release-notes.qmd b/site/releases/2024/2024-dec-24/release-notes.qmd
index 8b3daa3531..91a9d75059 100644
--- a/site/releases/2024/2024-dec-24/release-notes.qmd
+++ b/site/releases/2024/2024-dec-24/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "December 24, 2024"
+aliases:
+ - ../../2024-dec-24/release-notes.html
---
This release brings additional customization features to the {{< var validmind.platform >}}, improvements to our documentation site, a brand new Help Center, and more!
diff --git a/site/releases/2024/2024-feb-14/highlights.qmd b/site/releases/2024/2024-feb-14/highlights.qmd
index 5e9b830b4d..98a6bb8d34 100644
--- a/site/releases/2024/2024-feb-14/highlights.qmd
+++ b/site/releases/2024/2024-feb-14/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "February 14, 2024"
+aliases:
+ - ../../2024-feb-14/highlights.html
---
We've improved the {{< var vm.product >}} user experience, from more supportive documentation templates, easier specification of inputs, and better filtering within the {{< var vm.developer >}}, to the ability to view which user ran actions within the {{< var vm.platform >}}.
diff --git a/site/releases/2024/2024-jan-18/highlights.qmd b/site/releases/2024/2024-jan-18/highlights.qmd
index 979f224381..b518cf3a15 100644
--- a/site/releases/2024/2024-jan-18/highlights.qmd
+++ b/site/releases/2024/2024-jan-18/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "January 18, 2024"
+aliases:
+ - ../../2024-jan-18/highlights.html
---
This release introduces a new dark mode to the {{< var validmind.platform >}}, along with new user and template management features, other enhancements, and bug fixes.
diff --git a/site/releases/2024/2024-jan-26/highlights.qmd b/site/releases/2024/2024-jan-26/highlights.qmd
index f9a6dccd4d..e4d6506b96 100644
--- a/site/releases/2024/2024-jan-26/highlights.qmd
+++ b/site/releases/2024/2024-jan-26/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "January 26, 2024"
+aliases:
+ - ../../2024-jan-26/highlights.html
---
This release includes numerous improvements to the {{< var vm.developer >}}, including new features for model and dataset initialization, easier testing, support for additional inputs and the Azure OpenAI API, updated notebooks, bug fixes, and much more.
diff --git a/site/releases/2024/2024-jul-22/release-notes.qmd b/site/releases/2024/2024-jul-22/release-notes.qmd
index 90a34db1c9..a9706b5540 100644
--- a/site/releases/2024/2024-jul-22/release-notes.qmd
+++ b/site/releases/2024/2024-jul-22/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "July 22, 2024"
+aliases:
+ - ../../2024-jul-22/release-notes.html
listing:
id: training
type: grid
diff --git a/site/releases/2024/2024-jun-10/release-notes.qmd b/site/releases/2024/2024-jun-10/release-notes.qmd
index 40318803d3..5a0a1d9850 100644
--- a/site/releases/2024/2024-jun-10/release-notes.qmd
+++ b/site/releases/2024/2024-jun-10/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "June 10, 2024"
+aliases:
+ - ../../2024-jun-10/release-notes.html
---
## {{< fa bullhorn >}} Release highlights
diff --git a/site/releases/2024/2024-mar-27/highlights.qmd b/site/releases/2024/2024-mar-27/highlights.qmd
index 498d9c927a..400bdc6972 100644
--- a/site/releases/2024/2024-mar-27/highlights.qmd
+++ b/site/releases/2024/2024-mar-27/highlights.qmd
@@ -1,5 +1,7 @@
---
title: "March 27, 2024"
+aliases:
+ - ../../2024-mar-27/highlights.html
---
## Release highlights
diff --git a/site/releases/2024/2024-may-22/release-notes.qmd b/site/releases/2024/2024-may-22/release-notes.qmd
index 0a1843fa7f..55224e2c6a 100644
--- a/site/releases/2024/2024-may-22/release-notes.qmd
+++ b/site/releases/2024/2024-may-22/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "May 22, 2024"
+aliases:
+ - ../../2024-may-22/release-notes.html
listing:
id: training
type: grid
diff --git a/site/releases/2024/2024-oct-22/release-notes.qmd b/site/releases/2024/2024-oct-22/release-notes.qmd
index e2bcd5da89..2e21446ad9 100644
--- a/site/releases/2024/2024-oct-22/release-notes.qmd
+++ b/site/releases/2024/2024-oct-22/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "October 22, 2024"
+aliases:
+ - ../../2024-oct-22/release-notes.html
listing:
id: training
type: grid
diff --git a/site/releases/2024/2024-sep-09/release-notes.qmd b/site/releases/2024/2024-sep-09/release-notes.qmd
index d14828aded..5713a11a6b 100644
--- a/site/releases/2024/2024-sep-09/release-notes.qmd
+++ b/site/releases/2024/2024-sep-09/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "September 9, 2024"
+aliases:
+ - ../../2024-sep-09/release-notes.html
---
We've expanded functionality in the {{< var vm.platform >}}, including a more extensible version of risk areas that allows you to customize guidelines associated with your validation templates, as well as the ability to reset your model workflows.
diff --git a/site/releases/2024/2024-sep-25/release-notes.qmd b/site/releases/2024/2024-sep-25/release-notes.qmd
index a2a179f010..6ba80fff10 100644
--- a/site/releases/2024/2024-sep-25/release-notes.qmd
+++ b/site/releases/2024/2024-sep-25/release-notes.qmd
@@ -1,5 +1,7 @@
---
title: "September 25, 2024"
+aliases:
+ - ../../2024-sep-25/release-notes.html
---
::: {.highlights}