Search code examples
pdflatexgithub-actions

How do I access the root of the GitHub Repository in a GitHub action?


I am trying to build a resume pdf from a resume.tex in my resume repository file whenever a commit is made.

I am getting the following error.

Error:  File '/home/runner/work/resume/resume/resume.tex' cannot be found from the directory '/github/workspace'.

How should I access the resume.tex file? If I just say root_file: resume.tex, the error is:

Error:  File 'resume.tex' cannot be found from the directory '/github/workspace'.

The .github/workflows/build_resume.yml file looks like this. The resume.tex file is in the root of my repository.

# This is a basic workflow to help you get started with Actions

name: Build PDF on commit.

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
#   workflow_dispatch: 

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      - name: Github Action for LaTeX
        uses: xu-cheng/latex-action@v2
        with:
          # The root LaTeX file to be compiled
          root_file: ${{ github.workspace }}/resume.tex
          # Interpret the root_file input as bash glob pattern
#           glob_root_file: # optional
          # The working directory for this action
#           working_directory: # optional
          # The LaTeX engine to be invoked
#           compiler: # optional, default is latexmk
          # Extra arguments to be passed to the LaTeX engine
#           args: # optional, default is -pdf -file-line-error -halt-on-error -interaction=nonstopmode
          # [Deprecated] Install extra packages by tlmgr
#           extra_packages: # optional
          # Install extra packages by apk
#           extra_system_packages: # optional
          # Install extra .ttf/.otf fonts.
#           extra_fonts: ./fonts/*.ttf
          # Arbitrary bash codes to be executed before compiling LaTeX documents
          pre_compile: tlmgr update --self && tlmgr update --all
          # Arbitrary bash codes to be executed after compiling LaTeX documents
          post_compile: latexmk -c
          # Instruct latexmk to enable --shell-escape
#           latexmk_shell_escape: # optional
          # Instruct latexmk to use LuaLaTeX
#           latexmk_use_lualatex: # optional
          # Instruct latexmk to use XeLaTeX
          latexmk_use_xelatex: true


Solution

  • When you want to execute files from the current repository, you need to use the actions/checkout first (at the beginning of your job's steps).

    This will allow you to access the repository $github_workspace (one of Github environment variables) in your workflow.

    Note: All commands you'll run after using the action/checkout will be executed at the repository root.

    For example, considering that your resume.tex file is at the root of the repository, you would use something like this:

       name: Example
    
       on:
         push:
         pull_request:
    
       jobs:
        build:
          runs-on: ubuntu-latest
          steps:
          - name: checkout repo
            uses: actions/checkout@v4
          - name: show resume.tex file content
            run: cat resume.tex
    

    Here is another workflow example from a personal repository, following the same logic if you want to execute a specific script located in the repository in your workflow. to perform any operation.