├── .github ├── FUNDING.yml └── workflows │ └── test-build.yml ├── .gitignore ├── README.md ├── meta.yaml ├── requirements.txt └── script ├── add-pdf-cover ├── covers │ ├── isro-cse-cover.pdf │ ├── nielit-cse-cover.pdf │ ├── tifr-cse-cover.pdf │ ├── ugcnet-cse-cover.pdf │ ├── vol1-cover.pdf │ └── vol2-cover.pdf ├── customize.py ├── meta.yaml └── run.sh ├── get-go-html ├── customize.py ├── meta.yaml ├── run.bat └── run.sh ├── make-go-pdf ├── customize.py ├── meta.yaml └── run.sh ├── make-pdf-from-html ├── customize.py ├── meta.yaml ├── run.bat └── run.sh ├── put-go-pdfs ├── customize.py ├── meta.yaml ├── run.bat └── run.sh └── upload-pdf-github-release ├── customize.py ├── meta.yaml ├── run.sh └── upload_release.sh /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: https://pmny.in/3IXN3eO4LhXi 13 | -------------------------------------------------------------------------------- /.github/workflows/test-build.yml: -------------------------------------------------------------------------------- 1 | name: Build GO PDF 2 | 3 | on: 4 | schedule: 5 | - cron: "1 1 * * *" 6 | workflow_dispatch: {} 7 | 8 | jobs: 9 | go-pdf-make: 10 | runs-on: intel-spr 11 | strategy: 12 | fail-fast: false 13 | matrix: 14 | os: [ubuntu-latest, windows-latest, macos-latest] 15 | book: ["_go-cse,_vol1", "_go-cse,_vol2", "_go-em", "_go-da"] 16 | 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | with: 21 | fetch-depth: 0 22 | - name: Configure git longpaths (Windows) 23 | if: matrix.os == 'windows-latest' 24 | run: | 25 | git config --system core.longpaths true 26 | 27 | - name: Install mlc-scripts 28 | run: | 29 | pip install mlc-scripts 30 | mlc pull repo gateoverflow@go-pdfs 31 | 32 | - name: Test Build (Linux/macOS) 33 | run: | 34 | #mlcr download,file --url=https://github.com/GATEOverflow/GO-PDFs/releases/download/ugcnet/book_filter6.html 35 | mlcr make,go,pdf,${{ matrix.book }} -v --quiet --skip_cover 36 | 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | build/* 3 | MANIFEST 4 | *.pyc 5 | __pycache__ 6 | develop-eggs/ 7 | dist/ 8 | eggs/ 9 | .eggs/ 10 | lib/ 11 | lib64/ 12 | sdist/ 13 | wheels/ 14 | .cache/ 15 | .coverage 16 | htmlcov 17 | *tmp/ 18 | *tmp-* 19 | *.pdf 20 | local/cache/ 21 | 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GO-PDFs 2 | From 2021 onwards all [PDFs](http://book.gateoverflow.in) of [GATE Overflow](https://gateoverflow.in) will be released here. 3 | 4 | Please check the [Releases](https://github.com/GATEOverflow/GO-PDFs/releases) for the latest PDFs. 5 | 6 | We are planning the following PDFs. 7 | 1. [GATE Overflow for GATE CSE 2025, 2 volumes](https://github.com/GATEOverflow/GO-PDFs/releases/tag/gatecse-2025) 8 | 2. [TIFR CSE PDF](https://github.com/GATEOverflow/GO-PDFs/releases/tag/tifr) 9 | 3. [GATE Overflow for UGC NET CSE](https://github.com/GATEOverflow/GO-PDFs/releases/tag/ugcnet) 10 | 4. [GATE Overflow for ISRO CSE](https://github.com/GATEOverflow/GO-PDFs/releases/tag/isro) 11 | 5. [GATE Overflow for NIELIT Scientist A,B,C,D CSE](https://github.com/GATEOverflow/GO-PDFs/releases/tag/NIELIT) 12 | 6. [Aptitude Overflow](https://github.com/GATEOverflow/GO-PDFs/releases/tag/aptitude) 13 | 14 | GATE Overflow PDFs are made from the contents of [GATE Overflow](https://gateoverflow.in) site which runs on [Q2A](https://www.question2answer.org/qa/) software. For making the PDFs from HTML we make use of the Open Source tool [wkhtmltopdf](https://wkhtmltopdf.org/). We also rely on this [wonderful plugin](https://github.com/GATEOverflow/q2a-book) from Noah to convert Q2A content to PDF. The PDF generation pipeline is automated via [MLCFlow](https://github.com/mlcommons/mlcflow). 15 | 16 | ## PDF generation 17 | ``` 18 | pip install mlc-scripts 19 | ``` 20 | More detailed installation steps can be found [here](https://docs.mlcommons.org/mlcflow/install/) 21 | 22 | ``` 23 | mlc pull repo gateoverflow@go-pdfs 24 | mlcr download,file --url=https://github.com/GATEOverflow/GO-PDFs/releases/download/ugcnet/book_filter6.html 25 | mlcr make,go,pdf,_go-cse,_vol1 --input=book_filter6.html 26 | ``` 27 | ### Expected Output 28 | ``` 29 | (mlcflow) ubuntu@i-02bf0b78653d15de9:~/MLC/repos/gateoverflow@go-pdfs/script/get-wkhtmltopdf$ mlcr make,go,pdf,_go-cse,_vol1 --input=book_filter6.html 30 | [2025-03-06 19:11:03,045 module.py:558 INFO] - * mlcr make,go,pdf,_go-cse,_vol1 31 | [2025-03-06 19:11:03,057 module.py:558 INFO] - * mlcr make,pdf,from-html,_go-cse,_vol1 32 | [2025-03-06 19:11:03,064 module.py:558 INFO] - * mlcr get,wkhtmltopdf,_with-qt 33 | [2025-03-06 19:11:03,064 module.py:1270 INFO] - ! load /home/ubuntu/MLC/repos/local/cache/get-wkhtmltopdf_1c609de0/mlc-cached-state.json 34 | [2025-03-06 19:11:03,067 module.py:5329 INFO] - ! cd /home/ubuntu/MLC/repos/gateoverflow@go-pdfs/script/get-wkhtmltopdf 35 | [2025-03-06 19:11:03,067 module.py:5330 INFO] - ! call /home/ubuntu/MLC/repos/gateoverflow@go-pdfs/script/make-pdf-from-html/run.sh from tmp-run.sh 36 | Running: 37 | wkhtmltopdf --javascript-delay 488000 -T 20mm -B 20mm --header-spacing 6 --title 'GATEOverflow for GATECSE' --no-stop-slow-scripts --load-error-handling ignore --enable-local-file-access toc book_filter6.html --enable-toc-back-links --zoom 0.7 /home/ubuntu/go_books/pdfs/filter1_volume1.pdf 38 | 39 | Loading pages (1/6) 40 | 41 | ``` 42 | 43 | > **ℹ️ Info** 44 | > The below commands are private to GATEOverflow as they require access to the HTML files from GATEOverflow. 45 | 46 | ### GO CSE 47 | 48 | ``` 49 | mlcr make,go,pdf,_go-cse,_vol1 50 | ``` 51 | 52 | ``` 53 | mlcr make,go,pdf,_go-cse,_vol2 54 | ``` 55 | 56 | ### GO Engineering Mathematics 57 | 58 | ``` 59 | mlcr make,go,pdf,_go-em 60 | ``` 61 | 62 | ### GO DA 63 | 64 | ``` 65 | mlcr make,go,pdf,_go-da 66 | ``` 67 | -------------------------------------------------------------------------------- /meta.yaml: -------------------------------------------------------------------------------- 1 | alias: gateoverflow@go-pdfs 2 | git: true 3 | uid: 2073469bb3004b98 4 | deps: 5 | - url: mlcommons@mlperf-automations 6 | branch: dev 7 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | mlcflow 2 | mlc-scripts 3 | -------------------------------------------------------------------------------- /script/add-pdf-cover/covers/isro-cse-cover.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GATEOverflow/GO-PDFs/7fb1daa7c7f51aabff094afb2e420fb6a3a91208/script/add-pdf-cover/covers/isro-cse-cover.pdf -------------------------------------------------------------------------------- /script/add-pdf-cover/covers/nielit-cse-cover.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GATEOverflow/GO-PDFs/7fb1daa7c7f51aabff094afb2e420fb6a3a91208/script/add-pdf-cover/covers/nielit-cse-cover.pdf -------------------------------------------------------------------------------- /script/add-pdf-cover/covers/tifr-cse-cover.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GATEOverflow/GO-PDFs/7fb1daa7c7f51aabff094afb2e420fb6a3a91208/script/add-pdf-cover/covers/tifr-cse-cover.pdf -------------------------------------------------------------------------------- /script/add-pdf-cover/covers/ugcnet-cse-cover.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GATEOverflow/GO-PDFs/7fb1daa7c7f51aabff094afb2e420fb6a3a91208/script/add-pdf-cover/covers/ugcnet-cse-cover.pdf -------------------------------------------------------------------------------- /script/add-pdf-cover/covers/vol1-cover.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GATEOverflow/GO-PDFs/7fb1daa7c7f51aabff094afb2e420fb6a3a91208/script/add-pdf-cover/covers/vol1-cover.pdf -------------------------------------------------------------------------------- /script/add-pdf-cover/covers/vol2-cover.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GATEOverflow/GO-PDFs/7fb1daa7c7f51aabff094afb2e420fb6a3a91208/script/add-pdf-cover/covers/vol2-cover.pdf -------------------------------------------------------------------------------- /script/add-pdf-cover/customize.py: -------------------------------------------------------------------------------- 1 | from mlc import utils 2 | import os 3 | 4 | def preprocess(i): 5 | 6 | os_info = i['os_info'] 7 | 8 | env = i['env'] 9 | 10 | meta = i['meta'] 11 | 12 | automation = i['automation'] 13 | 14 | quiet = (env.get('MLC_QUIET', False) == 'yes') 15 | 16 | cover_file = env['MLC_PDF_COVER_PATH'] 17 | pdf_file = env['MLC_PDF_FILE_PATH'] 18 | final_pdf_file = env.get('MLC_PDF_OUTPUT_FILE_PATH', '') 19 | if final_pdf_file == '': 20 | final_pdf_file = os.path.join(os.getcwd(), f"final_{os.path.basename(pdf_file)}") 21 | 22 | cmd = f"""pdftk {cover_file} {pdf_file} cat output {final_pdf_file}""" 23 | 24 | env['MLC_RUN_CMD'] = cmd 25 | 26 | return {'return':0} 27 | 28 | def postprocess(i): 29 | 30 | env = i['env'] 31 | 32 | return {'return':0} 33 | -------------------------------------------------------------------------------- /script/add-pdf-cover/meta.yaml: -------------------------------------------------------------------------------- 1 | alias: add-pdf-cover 2 | automation_alias: script 3 | automation_uid: 5b4e0237da074764 4 | cache: false 5 | tags: 6 | - add 7 | - cover 8 | - pdf 9 | deps: 10 | - tags: get,apt-package,_package.pdftk 11 | env: 12 | MLC_APT_CHECK_CMD: 'pdftk --version' 13 | uid: 347b7ca88c30485a 14 | variations: 15 | go-cse: {} 16 | vol1: {} 17 | go-cse,vol1: 18 | env: 19 | MLC_PDF_COVER_PATH: <<>>/covers/vol1-cover.pdf 20 | MLC_PDF_FILE_PATH: '<<>>/filter1_volume1.pdf' 21 | MLC_PDF_OUTPUT_FILE_PATH: 'volume1.pdf' 22 | 23 | vol2: {} 24 | go-cse,vol2: 25 | env: 26 | MLC_PDF_COVER_PATH: <<>>/covers/vol2-cover.pdf 27 | MLC_PDF_FILE_PATH: '<<>>/filter1_volume2.pdf' 28 | MLC_PDF_OUTPUT_FILE_PATH: 'volume2.pdf' 29 | isro: {} 30 | tifr: {} 31 | nielit: {} 32 | ugcnet: {} 33 | 34 | go-cse,isro: 35 | env: 36 | MLC_PDF_COVER_PATH: <<>>/covers/isro-cse-cover.pdf 37 | MLC_PDF_FILE_PATH: '<<>>/isro.pdf' 38 | MLC_PDF_OUTPUT_FILE_PATH: 'isro.pdf' 39 | go-cse,tifr: 40 | env: 41 | MLC_PDF_COVER_PATH: <<>>/covers/tifr-cse-cover.pdf 42 | MLC_PDF_FILE_PATH: '<<>>/tifr.pdf' 43 | MLC_PDF_OUTPUT_FILE_PATH: 'tifr.pdf' 44 | go-cse,nielit: 45 | env: 46 | MLC_PDF_COVER_PATH: <<>>/covers/nielit-cse-cover.pdf 47 | MLC_PDF_FILE_PATH: '<<>>/nielit.pdf' 48 | MLC_PDF_OUTPUT_FILE_PATH: 'nielit.pdf' 49 | go-cse,ugcnet: 50 | env: 51 | MLC_PDF_COVER_PATH: <<>>/covers/ugcnet-cse-cover.pdf 52 | MLC_PDF_FILE_PATH: '<<>>/ugcnet.pdf' 53 | MLC_PDF_OUTPUT_FILE_PATH: 'ugcnet.pdf' 54 | -------------------------------------------------------------------------------- /script/add-pdf-cover/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #CM Script location: ${MLC_TMP_CURRENT_SCRIPT_PATH} 4 | 5 | #To export any variable 6 | #echo "VARIABLE_NAME=VARIABLE_VALUE" >>tmp-run-env.out 7 | 8 | #${MLC_PYTHON_BIN_WITH_PATH} contains the path to python binary if "get,python" is added as a dependency 9 | 10 | echo "Running: " 11 | echo "${MLC_RUN_CMD}" 12 | echo "" 13 | 14 | if [[ ${MLC_FAKE_RUN} != "yes" ]]; then 15 | eval "${MLC_RUN_CMD}" 16 | test $? -eq 0 || exit 1 17 | fi 18 | 19 | #root=$HOME/go_books 20 | #out=$root/pdfs 21 | 22 | #wkhtmltopdf --javascript-delay 488000 -T 20mm -B 20mm --header-spacing 6 --title "GATE Overflow Book" --no-stop-slow-scripts --load-error-handling ignore --enable-local-file-access toc $root/gate_overflow_for_gate_cse/book_filter1_volume1.html --enable-toc-back-links --zoom 1.0 --header-html header.html --footer-html footer.html $out/filter1_volume1.pdf 23 | #wkhtmltopdf --javascript-delay ${MLC_GO_PDF_JS_DELAY} -T 20mm -B 20mm --header-spacing 6 --title ${MLC_GO_PDF_TITLE} --no-stop-slow-scripts --load-error-handling ignore --enable-local-file-access toc $root/gate_overflow_for_gate_cse/${MLC_GO_HTML_NAME} --enable-toc-back-links --zoom 1.0 $out/${MLC_GO_PDF_NAME} 24 | #wkhtmltopdf --javascript-delay 688000 -T 20mm -B 20mm --header-spacing 6 --title "GATE Overflow Book" --no-stop-slow-scripts --load-error-handling ignore --enable-local-file-access toc $root/gate_overflow_for_gate_cse/book_filter1_volume2.html --enable-toc-back-links --zoom 1.0 $out/filter1_volume2.pdf 25 | 26 | -------------------------------------------------------------------------------- /script/get-go-html/customize.py: -------------------------------------------------------------------------------- 1 | from mlc import utils 2 | import os 3 | import subprocess 4 | 5 | 6 | def preprocess(i): 7 | 8 | env = i['env'] 9 | state = i['state'] 10 | 11 | os_info = i['os_info'] 12 | 13 | env['MLC_RUN_CMD'] = f"""rclone copy go-pdfs-html: {env['MLC_GO_PDFS_HTML_ROOT']}""" 14 | return {'return': 0} 15 | 16 | 17 | def postprocess(i): 18 | 19 | env = i['env'] 20 | state = i['state'] 21 | 22 | env['MLC_DEPENDENT_CACHED_PATH'] = env['MLC_GO_PDFS_HTML_ROOT'] 23 | 24 | os_info = i['os_info'] 25 | 26 | return {'return': 0} 27 | -------------------------------------------------------------------------------- /script/get-go-html/meta.yaml: -------------------------------------------------------------------------------- 1 | alias: get-go-html 2 | automation_alias: script 3 | automation_uid: 5b4e0237da074764 4 | category: MLC Script Template 5 | deps: 6 | - tags: get,rclone-config,_config-name.go-pdfs-html 7 | force_cache: yes 8 | env: 9 | MLC_RCLONE_DRIVE_FOLDER_ID: 17YlxqPLRY8xKkwa1bMkSVTQpeFQV72Wr 10 | - env: 11 | MLC_CACHE_DIR_ENV_NAME: MLC_GO_PDFS_HTML_ROOT 12 | extra_cache_tags: go-pdfs-html,html,go 13 | tags: get,cache,dir,_name.go-pdfs-html 14 | cache: false 15 | new_env_keys: 16 | - MLC_GO_PDFS_HTML_ROOT 17 | new_state_keys: [] 18 | post_deps: [] 19 | posthook_deps: [] 20 | prehook_deps: [] 21 | tags: 22 | - go 23 | - html 24 | - get 25 | uid: 82a921e0a31a4395 26 | -------------------------------------------------------------------------------- /script/get-go-html/run.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enabledelayedexpansion 3 | 4 | :: Function to exit if the last command failed 5 | :exit_if_error 6 | if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% 7 | exit /b 0 8 | 9 | :: Function to run a command 10 | :run 11 | echo Running: 12 | echo %1 13 | echo. 14 | 15 | if /I "%MLC_FAKE_RUN%" NEQ "yes" ( 16 | call %1 17 | call :exit_if_error 18 | ) 19 | exit /b 0 20 | 21 | :: Add your run commands here... 22 | call :run "%MLC_RUN_CMD%" 23 | 24 | -------------------------------------------------------------------------------- /script/get-go-html/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | function exit_if_error() { 3 | test $? -eq 0 || exit $? 4 | } 5 | 6 | function run() { 7 | echo "Running: " 8 | echo "$1" 9 | echo "" 10 | if [[ ${MLC_FAKE_RUN} != 'yes' ]]; then 11 | eval "$1" 12 | exit_if_error 13 | fi 14 | } 15 | 16 | #Add your run commands here... 17 | run "$MLC_RUN_CMD" 18 | -------------------------------------------------------------------------------- /script/make-go-pdf/customize.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | def preprocess(i): 4 | 5 | os_info = i['os_info'] 6 | 7 | env = i['env'] 8 | 9 | meta = i['meta'] 10 | 11 | automation = i['automation'] 12 | 13 | quiet = (env.get('MLC_QUIET', False) == 'yes') 14 | 15 | return {'return':0} 16 | 17 | def postprocess(i): 18 | 19 | env = i['env'] 20 | 21 | return {'return':0} 22 | -------------------------------------------------------------------------------- /script/make-go-pdf/meta.yaml: -------------------------------------------------------------------------------- 1 | alias: make-go-pdf 2 | automation_alias: script 3 | automation_uid: 5b4e0237da074764 4 | cache: false 5 | tags: 6 | - make 7 | - go 8 | - pdf 9 | input_mapping: 10 | skip_pdf: MLC_SKIP_PDF_MAKE 11 | skip_cover: MLC_SKIP_PDF_COVER 12 | input: MLC_HTML_FILE_PATH 13 | upload: MLC_UPLOAD_PDF 14 | uid: 43bdc18426524e54 15 | 16 | prehook_deps: 17 | - tags: put,go,pdfs 18 | enable_if_env: 19 | MLC_UPLOAD_PDF: 20 | - on 21 | variations: 22 | go-em: 23 | deps: 24 | - tags: make,pdf,from-html,_go-em 25 | skip_if_env: 26 | MLC_SKIP_PDF_MAKE: 27 | - yes 28 | go-da: 29 | deps: 30 | - tags: make,pdf,from-html,_go-da 31 | skip_if_env: 32 | MLC_SKIP_PDF_MAKE: 33 | - yes 34 | 35 | go-cse: 36 | env: {} 37 | 38 | isro: {} 39 | tifr: {} 40 | nielit: {} 41 | ugcnet: {} 42 | 43 | go-cse,isro: 44 | deps: 45 | - tags: make,pdf,from-html,_go-cse,_isro 46 | skip_if_env: 47 | MLC_SKIP_PDF_MAKE: 48 | - yes 49 | - tags: add,pdf,cover,_go-cse,_isro 50 | skip_if_env: 51 | MLC_SKIP_PDF_COVER: 52 | - yes 53 | 54 | go-cse,nielit: 55 | deps: 56 | - tags: make,pdf,from-html,_go-cse,_nielit 57 | skip_if_env: 58 | MLC_SKIP_PDF_MAKE: 59 | - yes 60 | - tags: add,pdf,cover,_go-cse,_nielit 61 | skip_if_env: 62 | MLC_SKIP_PDF_COVER: 63 | - yes 64 | 65 | go-cse,tifr: 66 | deps: 67 | - tags: make,pdf,from-html,_go-cse,_tifr 68 | skip_if_env: 69 | MLC_SKIP_PDF_MAKE: 70 | - yes 71 | - tags: add,pdf,cover,_go-cse,_tifr 72 | skip_if_env: 73 | MLC_SKIP_PDF_COVER: 74 | - yes 75 | 76 | go-cse,ugcnet: 77 | deps: 78 | - tags: make,pdf,from-html,_go-cse,_ugcnet 79 | skip_if_env: 80 | MLC_SKIP_PDF_MAKE: 81 | - yes 82 | - tags: add,pdf,cover,_go-cse,_ugcnet 83 | skip_if_env: 84 | MLC_SKIP_PDF_COVER: 85 | - yes 86 | 87 | go-cse,isro: 88 | deps: 89 | - tags: make,pdf,from-html,_go-cse,_isro 90 | skip_if_env: 91 | MLC_SKIP_PDF_MAKE: 92 | - yes 93 | - tags: add,pdf,cover,_go-cse,_isro 94 | skip_if_env: 95 | MLC_SKIP_PDF_COVER: 96 | - yes 97 | 98 | vol1: {} 99 | go-cse,vol1: 100 | deps: 101 | - tags: make,pdf,from-html,_go-cse,_vol1 102 | skip_if_env: 103 | MLC_SKIP_PDF_MAKE: 104 | - yes 105 | - tags: add,pdf,cover,_go-cse,_vol1 106 | skip_if_env: 107 | MLC_SKIP_PDF_COVER: 108 | - yes 109 | - tags: upload,pdf,release,_go-cse,_vol1 110 | 111 | 112 | vol2: {} 113 | go-cse,vol2: 114 | deps: 115 | - tags: make,pdf,from-html,_go-cse,_vol2 116 | skip_if_env: 117 | MLC_SKIP_PDF_MAKE: 118 | - yes 119 | - tags: add,pdf,cover,_go-cse,_vol2 120 | skip_if_env: 121 | MLC_SKIP_PDF_COVER: 122 | - yes 123 | - tags: upload,pdf,release,_go-cse,_vol2 124 | -------------------------------------------------------------------------------- /script/make-go-pdf/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #To export any variable 4 | #echo "VARIABLE_NAME=VARIABLE_VALUE" >>tmp-run-env.out 5 | 6 | #${MLC_PYTHON_BIN_WITH_PATH} contains the path to python binary if "get,python" is added as a dependency 7 | 8 | 9 | if [[ ${MLC_FAKE_RUN} != "yes" ]]; then 10 | echo "Running: " 11 | echo "${MLC_RUN_CMD}" 12 | echo "" 13 | eval "${MLC_RUN_CMD}" 14 | test $? -eq 0 || exit $? 15 | fi 16 | -------------------------------------------------------------------------------- /script/make-pdf-from-html/customize.py: -------------------------------------------------------------------------------- 1 | from mlc import utils 2 | import os 3 | 4 | def preprocess(i): 5 | 6 | os_info = i['os_info'] 7 | 8 | env = i['env'] 9 | 10 | meta = i['meta'] 11 | 12 | automation = i['automation'] 13 | q = '"' if os_info['platform'] == 'windows' else "'" 14 | 15 | quiet = (env.get('MLC_QUIET', False) == 'yes') 16 | 17 | env['MLC_ROOT_PATH'] = env.get('MLC_GO_PDFS_HTML_ROOT', os.path.join(os.path.expanduser("~"), "go_books")) 18 | env['MLC_PDF_PATH'] = env['MLC_GO_PDFS_OUT'] 19 | 20 | html_file_path = env.get('MLC_HTML_FILE_PATH', os.path.join(env['MLC_ROOT_PATH'], env['MLC_GO_HTML_FOLDER_NAME'], env['MLC_GO_HTML_FILE_NAME'])) 21 | 22 | if not os.path.exists(html_file_path): 23 | return {'return': 1, 'error': f"""File {html_file_path} is not existing. Please provide a valid path for the input HTML file"""} 24 | 25 | cmd = f"""wkhtmltopdf --javascript-delay {env['MLC_GO_PDF_JS_DELAY']} -T 20mm -B 20mm --header-spacing 6 --title {q}{env['MLC_GO_PDF_TITLE']}{q} --no-stop-slow-scripts --load-error-handling ignore --enable-local-file-access toc {q}{html_file_path}{q} --enable-toc-back-links --zoom {env['MLC_GO_PDF_SCALE']} {q}{os.path.join(env['MLC_PDF_PATH'],env['MLC_GO_PDF_NAME'])}{q} """ 26 | 27 | env['MLC_RUN_CMD'] = cmd 28 | 29 | return {'return':0} 30 | 31 | def postprocess(i): 32 | 33 | env = i['env'] 34 | out_file_path = os.path.join(env['MLC_PDF_PATH'],env['MLC_GO_PDF_NAME']) 35 | print(f"""PDF file generated at {out_file_path}""") 36 | 37 | env['MLC_PDF_FILE_PATH'] = out_file_path 38 | 39 | return {'return':0} 40 | -------------------------------------------------------------------------------- /script/make-pdf-from-html/meta.yaml: -------------------------------------------------------------------------------- 1 | alias: make-pdf-from-html 2 | automation_alias: script 3 | automation_uid: 5b4e0237da074764 4 | cache: false 5 | tags: 6 | - make 7 | - from-html 8 | - pdf 9 | deps: 10 | - tags: get,wkhtmltopdf,_with-qt 11 | - tags: get,go,html 12 | skip_if_env: 13 | MLC_HTML_FILE_PATH: 14 | - on 15 | - env: 16 | MLC_CACHE_DIR_ENV_NAME: MLC_GO_PDFS_OUT 17 | extra_cache_tags: go-pdfs-out,pdfs,go 18 | tags: get,cache,dir,_name.go-pdfs-out 19 | uid: 403a21dfa7bc434a 20 | new_env_keys: 21 | - MLC_PDF_FILE_PATH 22 | - MLC_GO_PDFS_OUT 23 | input_mapping: 24 | input: MLC_HTML_FILE_PATH 25 | variations: 26 | go-da: 27 | group: branch 28 | env: 29 | MLC_GO_PDF_BRANCH: da 30 | MLC_GO_PDF_TITLE: 'GATEOverflow for GATE DA' 31 | MLC_GO_HTML_FOLDER_NAME: gate_overflow_for_gate_cse 32 | MLC_GO_PDF_JS_DELAY: 3880000 33 | MLC_GO_PDF_SCALE: '1.0' 34 | MLC_GO_HTML_FILE_NAME: book_gate_da.html 35 | MLC_GO_PDF_NAME: da.pdf 36 | go-em: 37 | group: branch 38 | env: 39 | MLC_GO_PDF_BRANCH: cse 40 | MLC_GO_PDF_TITLE: 'GATEOverflow for GATECSE' 41 | MLC_GO_HTML_FOLDER_NAME: gate_overflow_for_gate_cse 42 | MLC_GO_PDF_JS_DELAY: 1688000 43 | MLC_GO_PDF_SCALE: '0.6' 44 | MLC_GO_HTML_FILE_NAME: book_gate_em.html 45 | MLC_GO_PDF_NAME: em.pdf 46 | go-cse: 47 | group: branch 48 | default: true 49 | env: 50 | MLC_GO_PDF_BRANCH: cse 51 | MLC_GO_PDF_TITLE: 'GATEOverflow for GATECSE' 52 | MLC_GO_HTML_FOLDER_NAME: gate_overflow_for_gate_cse 53 | isro: 54 | group: exam 55 | tifr: 56 | group: exam 57 | nielit: 58 | group: exam 59 | ugcnet: 60 | group: exam 61 | 62 | go-cse,isro: 63 | default_env: 64 | MLC_GO_PDF_JS_DELAY: 1788000 65 | MLC_GO_HTML_FILE_NAME: book_filter2.html 66 | MLC_GO_PDF_SCALE: '0.7' 67 | MLC_GO_PDF_NAME: isro.pdf 68 | 69 | go-cse,tifr: 70 | default_env: 71 | MLC_GO_PDF_JS_DELAY: 6588000 72 | MLC_GO_HTML_FILE_NAME: book_filter5.html 73 | MLC_GO_PDF_SCALE: '0.7' 74 | MLC_GO_PDF_NAME: tifr.pdf 75 | 76 | go-cse,nielit: 77 | default_env: 78 | MLC_GO_PDF_JS_DELAY: 6988000 79 | MLC_GO_HTML_FILE_NAME: book_filter4.html 80 | MLC_GO_PDF_SCALE: '0.7' 81 | MLC_GO_PDF_NAME: nielit.pdf 82 | 83 | go-cse,ugcnet: 84 | default_env: 85 | MLC_GO_PDF_JS_DELAY: 77880000 86 | MLC_GO_HTML_FILE_NAME: book_filter6.html 87 | MLC_GO_PDF_SCALE: '0.7' 88 | MLC_GO_PDF_NAME: ugcnet.pdf 89 | 90 | vol1: 91 | group: volume 92 | default: true 93 | vol2: 94 | group: volume 95 | 96 | go-cse,vol1: 97 | default_env: 98 | MLC_GO_PDF_JS_DELAY: 8488000 99 | MLC_GO_HTML_FILE_NAME: book_filter1_volume1.html 100 | MLC_GO_PDF_SCALE: '0.7' 101 | MLC_GO_PDF_NAME: filter1_volume1.pdf 102 | go-cse,vol2: 103 | default_env: 104 | MLC_GO_PDF_JS_DELAY: 8880000 105 | MLC_GO_HTML_FILE_NAME: book_filter1_volume2.html 106 | MLC_GO_PDF_SCALE: '1.0' 107 | MLC_GO_PDF_NAME: filter1_volume2.pdf 108 | 109 | 110 | -------------------------------------------------------------------------------- /script/make-pdf-from-html/run.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal 3 | 4 | echo Running: 5 | echo %MLC_RUN_CMD% 6 | echo. 7 | 8 | if /I not "%MLC_FAKE_RUN%"=="yes" ( 9 | call %MLC_RUN_CMD% 10 | if errorlevel 1 exit /b 1 11 | ) 12 | 13 | endlocal 14 | -------------------------------------------------------------------------------- /script/make-pdf-from-html/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #CM Script location: ${MLC_TMP_CURRENT_SCRIPT_PATH} 4 | 5 | #To export any variable 6 | #echo "VARIABLE_NAME=VARIABLE_VALUE" >>tmp-run-env.out 7 | 8 | #${MLC_PYTHON_BIN_WITH_PATH} contains the path to python binary if "get,python" is added as a dependency 9 | 10 | echo "Running: " 11 | echo "${MLC_RUN_CMD}" 12 | echo "" 13 | 14 | if [[ ${MLC_FAKE_RUN} != "yes" ]]; then 15 | eval "${MLC_RUN_CMD}" 16 | test $? -eq 0 || exit $? 17 | fi 18 | 19 | #root=$HOME/go_books 20 | #out=$root/pdfs 21 | 22 | #wkhtmltopdf --javascript-delay 488000 -T 20mm -B 20mm --header-spacing 6 --title "GATE Overflow Book" --no-stop-slow-scripts --load-error-handling ignore --enable-local-file-access toc $root/gate_overflow_for_gate_cse/book_filter1_volume1.html --enable-toc-back-links --zoom 1.0 --header-html header.html --footer-html footer.html $out/filter1_volume1.pdf 23 | #wkhtmltopdf --javascript-delay ${MLC_GO_PDF_JS_DELAY} -T 20mm -B 20mm --header-spacing 6 --title ${MLC_GO_PDF_TITLE} --no-stop-slow-scripts --load-error-handling ignore --enable-local-file-access toc $root/gate_overflow_for_gate_cse/${MLC_GO_HTML_NAME} --enable-toc-back-links --zoom 1.0 $out/${MLC_GO_PDF_NAME} 24 | #wkhtmltopdf --javascript-delay 688000 -T 20mm -B 20mm --header-spacing 6 --title "GATE Overflow Book" --no-stop-slow-scripts --load-error-handling ignore --enable-local-file-access toc $root/gate_overflow_for_gate_cse/book_filter1_volume2.html --enable-toc-back-links --zoom 1.0 $out/filter1_volume2.pdf 25 | 26 | -------------------------------------------------------------------------------- /script/put-go-pdfs/customize.py: -------------------------------------------------------------------------------- 1 | from mlc import utils 2 | import os 3 | import subprocess 4 | 5 | 6 | def preprocess(i): 7 | 8 | env = i['env'] 9 | state = i['state'] 10 | 11 | os_info = i['os_info'] 12 | 13 | 14 | pdf_file_path = env['MLC_PDF_FILE_PATH'] 15 | 16 | env['MLC_RUN_CMD'] = f"""rclone copy {pdf_file_path} go-pdfs-out:""" 17 | return {'return': 0} 18 | 19 | 20 | def postprocess(i): 21 | 22 | env = i['env'] 23 | state = i['state'] 24 | 25 | env['MLC_GO_PDFS_OUT'] = os.path.join(os.getcwd(), 'go-pdfs-out') 26 | env['MLC_DEPENDENT_CACHED_PATH'] = env['MLC_GO_PDFS_OUT'] 27 | 28 | os_info = i['os_info'] 29 | 30 | return {'return': 0} 31 | -------------------------------------------------------------------------------- /script/put-go-pdfs/meta.yaml: -------------------------------------------------------------------------------- 1 | alias: put-go-pdfs 2 | automation_alias: script 3 | automation_uid: 5b4e0237da074764 4 | cache: false 5 | category: MLC Script Template 6 | deps: 7 | - tags: get,rclone-config,_write,_config-name.go-pdfs-out 8 | force_cache: yes 9 | env: 10 | MLC_RCLONE_DRIVE_FOLDER_ID: 1auwx-H5_2A4tOHP9LdptX8H3JdCYXBgk 11 | new_env_keys: 12 | - MLC_GO_PDFS_OUT 13 | new_state_keys: [] 14 | post_deps: [] 15 | posthook_deps: [] 16 | prehook_deps: [] 17 | tags: 18 | - drive 19 | - pdfs 20 | - put 21 | - go 22 | uid: 248468e1ae1e43eb 23 | -------------------------------------------------------------------------------- /script/put-go-pdfs/run.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enabledelayedexpansion 3 | 4 | :: Function to exit if the last command failed 5 | :exit_if_error 6 | if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% 7 | exit /b 0 8 | 9 | :: Function to run a command 10 | :run 11 | echo Running: 12 | echo %1 13 | echo. 14 | 15 | if /I "%MLC_FAKE_RUN%" NEQ "yes" ( 16 | call %1 17 | call :exit_if_error 18 | ) 19 | exit /b 0 20 | 21 | :: Add your run commands here... 22 | call :run "%MLC_RUN_CMD%" 23 | 24 | -------------------------------------------------------------------------------- /script/put-go-pdfs/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | function exit_if_error() { 3 | test $? -eq 0 || exit $? 4 | } 5 | 6 | function run() { 7 | echo "Running: " 8 | echo "$1" 9 | echo "" 10 | if [[ ${MLC_FAKE_RUN} != 'yes' ]]; then 11 | eval "$1" 12 | exit_if_error 13 | fi 14 | } 15 | 16 | run "$MLC_RCLONE_CONFIG_CMD" 17 | run "$MLC_RCLONE_CONNECT_CMD" 18 | #Add your run commands here... 19 | run "$MLC_RUN_CMD" 20 | -------------------------------------------------------------------------------- /script/upload-pdf-github-release/customize.py: -------------------------------------------------------------------------------- 1 | from mlc import utils 2 | import os 3 | 4 | def preprocess(i): 5 | 6 | os_info = i['os_info'] 7 | 8 | env = i['env'] 9 | 10 | meta = i['meta'] 11 | 12 | automation = i['automation'] 13 | 14 | quiet = (env.get('MLC_QUIET', False) == 'yes') 15 | 16 | cmd = f"""bash {os.path.join(env['MLC_TMP_CURRENT_SCRIPT_PATH'], "upload_release.sh") }""" 17 | 18 | env['MLC_RUN_CMD'] = cmd 19 | 20 | return {'return':0} 21 | 22 | def postprocess(i): 23 | 24 | env = i['env'] 25 | 26 | return {'return':0} 27 | -------------------------------------------------------------------------------- /script/upload-pdf-github-release/meta.yaml: -------------------------------------------------------------------------------- 1 | alias: upload-pdf-github-release 2 | automation_alias: script 3 | automation_uid: 5b4e0237da074764 4 | cache: false 5 | tags: 6 | - upload 7 | - github 8 | - pdf 9 | - release 10 | uid: 4870875d43c34005 11 | default_env: 12 | REPO_OWNER: "GATEOverflow" 13 | REPO_NAME: "GO-PDFs" 14 | variations: 15 | go-cse: 16 | env: 17 | RELEASE_ID: "161340981" 18 | vol1: {} 19 | go-cse,vol1: 20 | env: 21 | ASSET_NAME: "volume1.pdf" 22 | vol2: {} 23 | go-cse,vol2: 24 | env: 25 | ASSET_NAME: "volume2.pdf" 26 | 27 | -------------------------------------------------------------------------------- /script/upload-pdf-github-release/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #CM Script location: ${MLC_TMP_CURRENT_SCRIPT_PATH} 4 | 5 | #To export any variable 6 | #echo "VARIABLE_NAME=VARIABLE_VALUE" >>tmp-run-env.out 7 | 8 | #${MLC_PYTHON_BIN_WITH_PATH} contains the path to python binary if "get,python" is added as a dependency 9 | 10 | echo "Running: " 11 | echo "${MLC_RUN_CMD}" 12 | echo "" 13 | 14 | if [[ ${MLC_FAKE_RUN} != "yes" ]]; then 15 | eval "${MLC_RUN_CMD}" 16 | test $? -eq 0 || exit $? 17 | fi 18 | 19 | #root=$HOME/go_books 20 | #out=$root/pdfs 21 | 22 | 23 | -------------------------------------------------------------------------------- /script/upload-pdf-github-release/upload_release.sh: -------------------------------------------------------------------------------- 1 | GITHUB_TOKEN=$GH_TOKEN 2 | 3 | delete_asset() { 4 | ASSET_NAME=$1 5 | # List assets for the release and extract the asset ID for the given name 6 | ASSET_ID=$(curl -H "Authorization: token $GITHUB_TOKEN" \ 7 | https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/$RELEASE_ID/assets | \ 8 | jq -r ".[] | select(.name==\"$ASSET_NAME\") | .id") 9 | 10 | # Check if the asset was found and delete it 11 | if [ -n "$ASSET_ID" ]; then 12 | echo "Found asset '$ASSET_NAME' with ID $ASSET_ID. Deleting it..." 13 | curl -X DELETE -H "Authorization: token $GITHUB_TOKEN" \ 14 | https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/assets/$ASSET_ID 15 | echo "Asset deleted." 16 | else 17 | echo "Asset '$ASSET_NAME' not found in release $RELEASE_ID." 18 | fi 19 | } 20 | 21 | delete_asset $ASSET_NAME 22 | 23 | curl -X POST \ 24 | -H "Authorization: token $GH_TOKEN" \ 25 | -H "Content-Type: application/octet-stream" \ 26 | --data-binary @$ASSET_NAME \ 27 | "https://uploads.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/$RELEASE_ID/assets?name=$ASSET_NAME" 28 | --------------------------------------------------------------------------------