Aditya Wagh
Aditya Wagh

Reputation: 322

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

Upvotes: 5

Views: 18099

Answers (2)

GuiFalourd
GuiFalourd

Reputation: 23340

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.

Upvotes: 12

Aditya Wagh
Aditya Wagh

Reputation: 322

If someone is looking to do the same, the following steps need to be done.

  • Go into your repository.
  • Compile latex document using xu-cheng/latex-action@v2
  • Check if PDF is generated.
  • Push PDF to repository.

The configuration file to do that will look like this.

name: Github Actions CI to build pdf from tex source.
on: push
jobs:
  build:
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    runs-on: ubuntu-latest
    steps:
    - name: Set up Git repository
      uses: actions/checkout@v2

    - name: Compile LaTeX document
      uses: xu-cheng/latex-action@v2
      with:
          # The root LaTeX file to be compiled
          root_file: resume_aditya_wagh.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: -pdf -file-line-error -halt-on-error -interaction=nonstopmode

          # 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 

    - name: Check pdf file
      run: |
        file resume_aditya_wagh.pdf | grep -q ' PDF '

    - name: Upload file to repository
      run: |
        git config --global user.name "adityamwagh"
        git config --global user.email "[email protected]"
        git add resume_aditya_wagh.pdf
        git commit -m "commit message"
        git push
      if: github.event_name == 'push' && github.ref == 'refs/heads/main'

Upvotes: 0

Related Questions