mirror of
				https://github.com/microsoft/autogen.git
				synced 2025-11-03 19:29:52 +00:00 
			
		
		
		
	Upgrade quarto and include mitigation for title issue, fix links (#1851)
* Upgrade quarto and include mitigation for title issue, fix links * repo_root * dont run quarto independently * test paths * test * resolve intermediate parents * remove print
This commit is contained in:
		
							parent
							
								
									cd3b5c6bbd
								
							
						
					
					
						commit
						de757707bc
					
				@ -14,9 +14,9 @@ RUN apt-get update \
 | 
			
		||||
   && apt-get -y install --no-install-recommends build-essential npm \
 | 
			
		||||
   && apt-get autoremove -y \
 | 
			
		||||
   && apt-get clean -y \
 | 
			
		||||
   && wget https://github.com/quarto-dev/quarto-cli/releases/download/v1.4.549/quarto-1.4.549-linux-amd64.deb \
 | 
			
		||||
   && dpkg -i quarto-1.4.549-linux-amd64.deb \
 | 
			
		||||
   && rm -rf /var/lib/apt/lists/* quarto-1.4.549-linux-amd64.deb
 | 
			
		||||
   && wget https://github.com/quarto-dev/quarto-cli/releases/download/v1.5.23/quarto-1.5.23-linux-amd64.deb \
 | 
			
		||||
   && dpkg -i quarto-1.5.23-linux-amd64.deb \
 | 
			
		||||
   && rm -rf /var/lib/apt/lists/* quarto-1.5.23-linux-amd64.deb
 | 
			
		||||
ENV DEBIAN_FRONTEND=dialog
 | 
			
		||||
 | 
			
		||||
# For docs
 | 
			
		||||
 | 
			
		||||
@ -33,12 +33,12 @@ RUN cd website
 | 
			
		||||
RUN yarn install --frozen-lockfile --ignore-engines
 | 
			
		||||
 | 
			
		||||
RUN arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) && \
 | 
			
		||||
    wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.4.549/quarto-1.4.549-linux-${arch}.tar.gz && \
 | 
			
		||||
    wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.5.23/quarto-1.5.23-linux-${arch}.tar.gz && \
 | 
			
		||||
    mkdir -p /home/autogen/quarto/ && \
 | 
			
		||||
    tar -xzf quarto-1.4.549-linux-${arch}.tar.gz --directory /home/autogen/quarto/ && \
 | 
			
		||||
    rm quarto-1.4.549-linux-${arch}.tar.gz
 | 
			
		||||
    tar -xzf quarto-1.5.23-linux-${arch}.tar.gz --directory /home/autogen/quarto/ && \
 | 
			
		||||
    rm quarto-1.5.23-linux-${arch}.tar.gz
 | 
			
		||||
 | 
			
		||||
ENV PATH="${PATH}:/home/autogen/quarto/quarto-1.4.549/bin/"
 | 
			
		||||
ENV PATH="${PATH}:/home/autogen/quarto/quarto-1.5.23/bin/"
 | 
			
		||||
 | 
			
		||||
# Exposes the Yarn port for Docusaurus
 | 
			
		||||
EXPOSE 3000
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								.github/workflows/deploy-website.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/workflows/deploy-website.yml
									
									
									
									
										vendored
									
									
								
							@ -44,12 +44,9 @@ jobs:
 | 
			
		||||
      - name: quarto install
 | 
			
		||||
        working-directory: ${{ runner.temp }}
 | 
			
		||||
        run: |
 | 
			
		||||
          wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.4.549/quarto-1.4.549-linux-amd64.tar.gz
 | 
			
		||||
          tar -xzf quarto-1.4.549-linux-amd64.tar.gz
 | 
			
		||||
          echo "$(pwd)/quarto-1.4.549/bin/" >> $GITHUB_PATH
 | 
			
		||||
      - name: quarto run
 | 
			
		||||
        run: |
 | 
			
		||||
          quarto render .
 | 
			
		||||
          wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.5.23/quarto-1.5.23-linux-amd64.tar.gz
 | 
			
		||||
          tar -xzf quarto-1.5.23-linux-amd64.tar.gz
 | 
			
		||||
          echo "$(pwd)/quarto-1.5.23/bin/" >> $GITHUB_PATH
 | 
			
		||||
      - name: Process notebooks
 | 
			
		||||
        run: |
 | 
			
		||||
          python process_notebooks.py render
 | 
			
		||||
@ -90,12 +87,9 @@ jobs:
 | 
			
		||||
      - name: quarto install
 | 
			
		||||
        working-directory: ${{ runner.temp }}
 | 
			
		||||
        run: |
 | 
			
		||||
          wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.4.549/quarto-1.4.549-linux-amd64.tar.gz
 | 
			
		||||
          tar -xzf quarto-1.4.549-linux-amd64.tar.gz
 | 
			
		||||
          echo "$(pwd)/quarto-1.4.549/bin/" >> $GITHUB_PATH
 | 
			
		||||
      - name: quarto run
 | 
			
		||||
        run: |
 | 
			
		||||
          quarto render .
 | 
			
		||||
          wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.5.23/quarto-1.5.23-linux-amd64.tar.gz
 | 
			
		||||
          tar -xzf quarto-1.5.23-linux-amd64.tar.gz
 | 
			
		||||
          echo "$(pwd)/quarto-1.5.23/bin/" >> $GITHUB_PATH
 | 
			
		||||
      - name: Process notebooks
 | 
			
		||||
        run: |
 | 
			
		||||
          python process_notebooks.py render
 | 
			
		||||
 | 
			
		||||
@ -56,11 +56,11 @@ class Result:
 | 
			
		||||
def check_quarto_bin(quarto_bin: str = "quarto") -> None:
 | 
			
		||||
    """Check if quarto is installed."""
 | 
			
		||||
    try:
 | 
			
		||||
        subprocess.check_output([quarto_bin, "--version"], text=True).strip()
 | 
			
		||||
        # version = tuple(map(int, version.split(".")))
 | 
			
		||||
        # if version < (1, 5, 23):
 | 
			
		||||
        #     print("Quarto version is too old. Please upgrade to 1.5.23 or later.")
 | 
			
		||||
        #     sys.exit(1)
 | 
			
		||||
        version = subprocess.check_output([quarto_bin, "--version"], text=True).strip()
 | 
			
		||||
        version = tuple(map(int, version.split(".")))
 | 
			
		||||
        if version < (1, 5, 23):
 | 
			
		||||
            print("Quarto version is too old. Please upgrade to 1.5.23 or later.")
 | 
			
		||||
            sys.exit(1)
 | 
			
		||||
 | 
			
		||||
    except FileNotFoundError:
 | 
			
		||||
        print("Quarto is not installed. Please install it from https://quarto.org")
 | 
			
		||||
@ -127,6 +127,27 @@ def skip_reason_or_none_if_ok(notebook: Path) -> typing.Optional[str]:
 | 
			
		||||
    return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def extract_title(notebook: Path) -> Optional[str]:
 | 
			
		||||
    """Extract the title of the notebook."""
 | 
			
		||||
    with open(notebook, "r", encoding="utf-8") as f:
 | 
			
		||||
        content = f.read()
 | 
			
		||||
 | 
			
		||||
    # Load the json and get the first cell
 | 
			
		||||
    json_content = json.loads(content)
 | 
			
		||||
    first_cell = json_content["cells"][0]
 | 
			
		||||
 | 
			
		||||
    # find the # title
 | 
			
		||||
    for line in first_cell["source"]:
 | 
			
		||||
        if line.startswith("# "):
 | 
			
		||||
            title = line[2:].strip()
 | 
			
		||||
            # Strip off the { if it exists
 | 
			
		||||
            if "{" in title:
 | 
			
		||||
                title = title[: title.find("{")].strip()
 | 
			
		||||
            return title
 | 
			
		||||
 | 
			
		||||
    return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def process_notebook(src_notebook: Path, website_dir: Path, notebook_dir: Path, quarto_bin: str, dry_run: bool) -> str:
 | 
			
		||||
    """Process a single notebook."""
 | 
			
		||||
 | 
			
		||||
@ -136,6 +157,16 @@ def process_notebook(src_notebook: Path, website_dir: Path, notebook_dir: Path,
 | 
			
		||||
    if "skip_render" in metadata:
 | 
			
		||||
        return fmt_skip(src_notebook, "skip_render is in notebook metadata")
 | 
			
		||||
 | 
			
		||||
    title = extract_title(src_notebook)
 | 
			
		||||
    if title is None:
 | 
			
		||||
        return fmt_error(src_notebook, "Title not found in notebook")
 | 
			
		||||
 | 
			
		||||
    front_matter = {}
 | 
			
		||||
    if "front_matter" in metadata:
 | 
			
		||||
        front_matter = metadata["front_matter"]
 | 
			
		||||
 | 
			
		||||
    front_matter["title"] = title
 | 
			
		||||
 | 
			
		||||
    if in_notebook_dir:
 | 
			
		||||
        relative_notebook = src_notebook.resolve().relative_to(notebook_dir.resolve())
 | 
			
		||||
        dest_dir = notebooks_target_dir(website_directory=website_dir)
 | 
			
		||||
@ -190,11 +221,7 @@ def process_notebook(src_notebook: Path, website_dir: Path, notebook_dir: Path,
 | 
			
		||||
                src_notebook, f"Failed to render {src_notebook}\n\nstderr:\n{result.stderr}\nstdout:\n{result.stdout}"
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    front_matter = {}
 | 
			
		||||
    if "front_matter" in metadata:
 | 
			
		||||
        front_matter = metadata["front_matter"]
 | 
			
		||||
 | 
			
		||||
    post_process_mdx(target_file, front_matter)
 | 
			
		||||
    post_process_mdx(target_file, src_notebook, front_matter)
 | 
			
		||||
 | 
			
		||||
    return fmt_ok(src_notebook)
 | 
			
		||||
 | 
			
		||||
@ -281,8 +308,7 @@ def get_error_info(nb: NotebookNode) -> Optional[NotebookError]:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# rendered_notebook is the final mdx file
 | 
			
		||||
def post_process_mdx(rendered_mdx: Path, front_matter: Dict) -> None:
 | 
			
		||||
    notebook_name = f"{rendered_mdx.stem}.ipynb"
 | 
			
		||||
def post_process_mdx(rendered_mdx: Path, source_notebooks: Path, front_matter: Dict) -> None:
 | 
			
		||||
    with open(rendered_mdx, "r", encoding="utf-8") as f:
 | 
			
		||||
        content = f.read()
 | 
			
		||||
 | 
			
		||||
@ -292,8 +318,22 @@ def post_process_mdx(rendered_mdx: Path, front_matter: Dict) -> None:
 | 
			
		||||
        front_matter = yaml.safe_load(content[4:front_matter_end])
 | 
			
		||||
        content = content[front_matter_end + 3 :]
 | 
			
		||||
 | 
			
		||||
    front_matter["source_notebook"] = f"/notebook/{notebook_name}"
 | 
			
		||||
    front_matter["custom_edit_url"] = f"https://github.com/microsoft/autogen/edit/main/notebook/{notebook_name}"
 | 
			
		||||
    # Each intermediate path needs to be resolved for this to work reliably
 | 
			
		||||
    repo_root = Path(__file__).parent.resolve().parent.resolve()
 | 
			
		||||
    repo_relative_notebook = source_notebooks.resolve().relative_to(repo_root)
 | 
			
		||||
    front_matter["source_notebook"] = f"/{repo_relative_notebook}"
 | 
			
		||||
    front_matter["custom_edit_url"] = f"https://github.com/microsoft/autogen/edit/main/{repo_relative_notebook}"
 | 
			
		||||
 | 
			
		||||
    # Is there a title on the content? Only search up until the first code cell
 | 
			
		||||
    first_code_cell = content.find("```")
 | 
			
		||||
    if first_code_cell != -1:
 | 
			
		||||
        title_search_content = content[:first_code_cell]
 | 
			
		||||
    else:
 | 
			
		||||
        title_search_content = content
 | 
			
		||||
 | 
			
		||||
    title_exists = title_search_content.find("# ") != -1
 | 
			
		||||
    if not title_exists:
 | 
			
		||||
        content = f"# {front_matter['title']}\n{content}"
 | 
			
		||||
 | 
			
		||||
    # inject in content directly after the markdown title the word done
 | 
			
		||||
    # Find the end of the line with the title
 | 
			
		||||
@ -305,9 +345,7 @@ def post_process_mdx(rendered_mdx: Path, front_matter: Dict) -> None:
 | 
			
		||||
    if "{" in title:
 | 
			
		||||
        title = title[: title.find("{")].strip()
 | 
			
		||||
 | 
			
		||||
    front_matter["title"] = title
 | 
			
		||||
 | 
			
		||||
    github_link = f"https://github.com/microsoft/autogen/blob/main/notebook/{notebook_name}"
 | 
			
		||||
    github_link = f"https://github.com/microsoft/autogen/blob/main/{repo_relative_notebook}"
 | 
			
		||||
    content = (
 | 
			
		||||
        content[:title_end]
 | 
			
		||||
        + "\n[]("
 | 
			
		||||
@ -318,10 +356,11 @@ def post_process_mdx(rendered_mdx: Path, front_matter: Dict) -> None:
 | 
			
		||||
 | 
			
		||||
    # If no colab link is present, insert one
 | 
			
		||||
    if "colab-badge.svg" not in content:
 | 
			
		||||
        colab_link = f"https://colab.research.google.com/github/microsoft/autogen/blob/main/{repo_relative_notebook}"
 | 
			
		||||
        content = (
 | 
			
		||||
            content[:title_end]
 | 
			
		||||
            + "\n[](https://colab.research.google.com/github/microsoft/autogen/blob/main/notebook/"
 | 
			
		||||
            + notebook_name
 | 
			
		||||
            + "\n[]("
 | 
			
		||||
            + colab_link
 | 
			
		||||
            + ")"
 | 
			
		||||
            + content[title_end:]
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user