Merge pull request #21 from captn3m0/sre-workbook-support

Add support to SRE Workbook.
This commit is contained in:
Nemo 2019-02-03 04:19:54 +05:30 committed by GitHub
commit f6729dce08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 80 additions and 19 deletions

View File

@ -1,10 +1,16 @@
# google-sre-ebook # Google SRE Book/s
![Cover](cover.jpg) Generates a EPUB/MOBI/PDF for the Google SRE Book/s.
Generates a EPUB/MOBI/PDF for the Google SRE Book. Original sources are downloaded from https://landing.google.com/sre/books
Original sources are downloaded from https://landing.google.com/sre/ # Books
## Site Reliability Engineering (2016)
<img src="cover/sre-book.jpg" width="320" alt="site reliability engineering cover" >
## The Site Reliability Workbook (2018)
<img src="cover/workbook.jpg" width="320" alt="the site reliability workbook cover" >
# Build # Build
@ -14,8 +20,14 @@ Requirements:
- Docker - Docker
You can generate either of books using `BOOK_SLUG` variable.
Available values for `BOOK_SLUG`:
- `sre_book` Site Reliability Engineering.
- `srw_book` The Site Reliability Workbook.
``` ```
$ docker run --rm --volume "$(pwd):/output" captn3m0/google-sre-ebook:latest $ docker run --rm --volume "$(pwd):/output" -e BOOK_SLUG='sre_book' captn3m0/google-sre-ebook:latest
``` ```
- You should see the final EPUB/MOBI/PDF files in the `output` directory after the above runs. - You should see the final EPUB/MOBI/PDF files in the `output` directory after the above runs.
@ -26,7 +38,7 @@ $ docker run --rm --volume "$(pwd):/output" captn3m0/google-sre-ebook:latest
``` ```
$ mkdir /tmp/sreoutput $ mkdir /tmp/sreoutput
$ chcon -Rt svirt_sandbox_file_t /tmp/sreoutput $ chcon -Rt svirt_sandbox_file_t /tmp/sreoutput
$ docker run --rm --volume "/tmp/sreoutput:/output" captn3m0/google-sre-ebook:latest $ docker run --rm --volume "/tmp/sreoutput:/output" -e BOOK_SLUG='sre_book' captn3m0/google-sre-ebook:latest
``` ```
The build for the above Docker image can be audited at <https://cloud.docker.com/swarm/captn3m0/repository/docker/captn3m0/google-sre-ebook/builds>. The build for the above Docker image can be audited at <https://cloud.docker.com/swarm/captn3m0/repository/docker/captn3m0/google-sre-ebook/builds>.
@ -46,7 +58,7 @@ Requirements:
# Known Issues # Known Issues
- metadata.xml is not complete. There are just too many authors - metadata is not complete. There are just too many authors
- Foreword/Preface is not part of the index - Foreword/Preface is not part of the index
# LICENSE # LICENSE

23
books.sh Normal file
View File

@ -0,0 +1,23 @@
# Google SRE Books.
# NOTE: The indentation before inner vars should be always "tab" not "space".
declare -A BOOKS
BOOKS=(
# Site Reliability Engineering
["SRE_BOOK"]='
BOOK_NAME=sre-book
BOOK_NAME_FULL=Site Reliability Engineering
BOOK_FILE=google-sre-book
BOOK_TOC_URL=https://landing.google.com/sre/sre-book/toc/index.html
'
# Site Reliability Workbook
["SRW_BOOK"]='
BOOK_NAME=workbook
BOOK_NAME_FULL=The Site Reliability Workbook
BOOK_FILE=google-sre-workbook
BOOK_TOC_URL=https://landing.google.com/sre/workbook/toc/index.html
'
)

View File

@ -1,14 +1,18 @@
#!/bin/bash #!/bin/bash
if [[ "${DEBUG}" == 1 ]]; then
set -x
fi
set -euo pipefail set -euo pipefail
IFS=$'\n\t' IFS=$'\n\t'
# Vars. # Get book details.
export BOOK_NAME="sre-book" source books.sh
export BOOK_NAME_FULL="Site Reliability Engineering" export ${BOOKS[${BOOK_SLUG^^}]}
BOOK_FILE="google-${BOOK_NAME}"
TOC_URL="https://landing.google.com/sre/${BOOK_NAME}/toc/index.html" # Common vars.
IMGS_DOMAIN="lh3.googleusercontent.com" IMGS_DOMAIN="lh3.googleusercontent.com"
#
# Make sure that links are relative \ # Make sure that links are relative \
# # Remove the /sre/ directories # # Remove the /sre/ directories
# Save stuff in html/ directory # Save stuff in html/ directory
@ -16,6 +20,7 @@ IMGS_DOMAIN="lh3.googleusercontent.com"
# Enable recursion, timestamping (--mirror) # Enable recursion, timestamping (--mirror)
# Images are hosted elsewhere, download them as well. # Images are hosted elsewhere, download them as well.
# We need to go up a level from /toc/ where we start # We need to go up a level from /toc/ where we start
# The "ture" at the end to ignore non-200 URLs like 404.
wget \ wget \
--convert-links \ --convert-links \
--directory-prefix=html \ --directory-prefix=html \
@ -27,18 +32,21 @@ wget \
--mirror \ --mirror \
--no-verbose \ --no-verbose \
--recursive \ --recursive \
--domains=${IMGS_DOMAIN},landing.google.com ${TOC_URL} --domains=${IMGS_DOMAIN},landing.google.com ${BOOK_TOC_URL} || true
# #
echo "Get working mode..."
MODE=${1:-} MODE=${1:-}
if [ "$MODE" != "docker" ];then if [ "$MODE" != "docker" ];then
bundle install bundle install
fi fi
#
# Add extension to files. # Add extension to files.
# That because `pandoc` cannot generate the right `mime type` without the extension. # That because `pandoc` cannot generate the right `mime type` without the extension.
# https://github.com/captn3m0/google-sre-ebook/issues/19 # https://github.com/captn3m0/google-sre-ebook/issues/19
echo "Fix images extension issue ..."
IMGS_FILES="$(ls html/${IMGS_DOMAIN}/*)" IMGS_FILES="$(ls html/${IMGS_DOMAIN}/*)"
for FILE_NAME_FULL in ${IMGS_FILES}; do for FILE_NAME_FULL in ${IMGS_FILES}; do
@ -48,24 +56,31 @@ for FILE_NAME_FULL in ${IMGS_FILES}; do
# Rename and replace file. # Rename and replace file.
mv "${FILE_NAME_FULL}" "${FILE_NAME_FULL}.${FILE_TYPE,,}" && mv "${FILE_NAME_FULL}" "${FILE_NAME_FULL}.${FILE_TYPE,,}" &&
grep -rl "${FILE_NAME_BASE}" ./html | xargs sed -i "s/${FILE_NAME_BASE}/${FILE_NAME_BASE}.${FILE_TYPE,,}/g" grep -rl -- "${FILE_NAME_BASE}" ./html | xargs sed -i -- "s/${FILE_NAME_BASE}/${FILE_NAME_BASE}.${FILE_TYPE,,}/g"
done done
#
# Generate epub from html.
echo "Generate book ..."
bundle exec ruby generate.rb bundle exec ruby generate.rb
pushd html/landing.google.com/sre/${BOOK_NAME}/toc pushd html/landing.google.com/sre/${BOOK_NAME}/toc
pandoc --from=html --to=epub \ pandoc --from=html --to=epub \
--output=../../../../../${BOOK_FILE}.epub \ --output=../../../../../${BOOK_FILE}.epub \
--epub-metadata=../../../../../${BOOK_NAME}.xml \ --epub-metadata=../../../../../metadata/${BOOK_NAME}.xml \
--epub-cover-image=../../../../../${BOOK_NAME}.jpg \ --epub-cover-image=../../../../../cover/${BOOK_NAME}.jpg \
complete.html complete.html
popd popd
#
# Generate other format from epub.
for EXTENSION in mobi pdf; do for EXTENSION in mobi pdf; do
ebook-convert ${BOOK_FILE}.epub ${BOOK_FILE}.${EXTENSION} ebook-convert ${BOOK_FILE}.epub ${BOOK_FILE}.${EXTENSION}
done done
if [ "$1"=="docker" ]; then #
# If it works inside docker.
if [ "$MODE" == "docker" ]; then
chown -v $(id -u):$(id -g) ${BOOK_FILE}.* chown -v $(id -u):$(id -g) ${BOOK_FILE}.*
mv -f ${BOOK_FILE}.* /output mv -f ${BOOK_FILE}.* /output
fi fi

BIN
cover/sre-book.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
cover/workbook.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

11
metadata/workbook.xml Normal file
View File

@ -0,0 +1,11 @@
<dc:identifier id="epub-id-1" opf:scheme="ISBN-10">1492029459</dc:identifier>
<dc:identifier id="epub-id-1" opf:scheme="ISBN-13">978-1492029458</dc:identifier>
<dc:title id="epub-title-1">The Site Reliability Workbook: Practical Ways to Implement SRE</dc:title>
<dc:date>2018-08-10</dc:date>
<dc:language>en-US</dc:language>
<dc:creator id="epub-creator-1" opf:role="edt">Betsy Beyer</dc:creator>
<dc:creator id="epub-creator-1" opf:role="edt">Niall Richard Murphy</dc:creator>
<dc:creator id="epub-creator-1" opf:role="edt">David K. Rensin</dc:creator>
<dc:creator id="epub-creator-1" opf:role="edt">Kent Kawahara</dc:creator>
<dc:creator id="epub-creator-1" opf:role="edt">Stephen Thorne</dc:creator>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB