GitHub Actions untuk publikasi situs web statis dari Jekyll

GitHub Actions untuk publikasi situs web statis dari Jekyll

Daftar Beta

Screen-Shot-2019-09-16-at-6.09.47-PM

Saat ini GitHub Actions masih dalam fase beta. Untuk mendaftarkanmu atau organisasimu, kamu harus mengunjungi laman ini: https://github.com/features/actions.

Tunggulah beberapa hari hingga kamu memperoleh surel berikut ini:

Screen-Shot-2019-09-16-at-6.11.52-PM

Menambahkan Workflow

Hal pertama yang saya perhatikan adalah kehadiran tab baru di laman repositori saya:

Screen-Shot-2019-09-16-at-6.15.02-PM

GitHub akan membuat folder baru di dalam direktori .github/workflow. Folder workflow ini akan dibaca oleh GitHub untuk menjalankan semua Action yang kita definisikan.

Awalnya saya bingung untuk menambahkan sebuah Action 😅 (saya tipe orang yang cenderung untuk membuat dahulu, baca dokumentasi belakangan), untungnya di halaman tersebut ada beberapa contoh yang bisa kita jadikan basis Action kita. Saya pilihlah "Build and test a Ruby project with Rake".

Screen-Shot-2019-09-16-at-6.20.22-PM

Saya memilih ini karena situs web https://ruby.id dipublikasikan dengan menggunakan perintah Rake. Pikir saya akan mudah... ternyata tidak juga 😅.

Workflow publikasi situs id-ruby

Singkatnya, inilah workflow pertama yang saya buat untuk publikasi situs web id-ruby.

Saya akan jelaskan satu per satu.

Memberikan nama dan menentukan kondisi pemicu

name: Deploy

on:
  push:
    branches:
      - master

Setiap aksi wajib diberikan nama name dan kondisi on. Pada contoh di atas, saya memberikan nama Deploy dan akan dipicu ketika ada even push ke cabang git master. Kenapa hanya master? Karena saya tidak ingin aksi ini dipicu oleh setiap commit. Terlalu boros.

Untuk melihat even-even lainnya, silakan melihat dokumentasi berikut: https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events.

Menentukan Virtual Environment

jobs:
  build:

    runs-on: ubuntu-latest

Karena saya kurang mengerti opsi-opsinya, maka saya menggunakan ubuntu-latest sebagaimana sudah dicontohkan sebelumnya 😅. Sip, beres. Tentunya kamu bisa melihat dan memilih-milih Virtual Environment lainnya di https://help.github.com/en/articles/virtual-environments-for-github-actions.

Menentukan langkah-langkah untuk menyiapkan aksi

Langkah-langkah ini saya peroleh melalui trial and error. Yang pertama kali saya lakukan sebenarnya adalah mencoba mengubah sedikit dari contoh yang sudah diberikan. Ini adalah steps dari contoh "Build and test a Ruby project with Rake":

    steps:
    - uses: actions/checkout@v1
    - name: Set up Ruby 2.6
      uses: actions/setup-ruby@v1
      with:
        ruby-version: 2.6.x
    - name: Build and test with Rake
      run: |
        gem install bundler
        bundle install --jobs 4 --retry 3
        bundle exec rake

Saya hanya mengganti bundle exec rake dengan bundle exec rake site:publish. Sebuah perintah yang sudah ada sebelumnya di repositori id-ruby.

Ternyata gagal 😢, karena perintah rake site:publish yang ada tidak mempertimbangkan perintah tersebut dijalankan di komputer orang lain (server). Karena komputer lain belum login ke GitHub, sehingga tidak bisa melakukan git push ke GitHub.

Cara mudah untuk mengatasi hal di atas adalah dengan menambahkan username dan password untuk login ke SSH GitHub. Sebagai pengembang yang masih ingin berkarir di bidang teknologi informasi, saya pun mencari cara lain supaya saya tidak perlu menambahkan username dan password 🕵️‍♂️.

Mencari cara untuk login ke GitHub tanpa mempublikasikan username dan password

Oke, ketemu GitHub Personal Access Token. Ternyata kita bisa membuat access token yang bisa dilampirkan pada konfigurasi git remote.

Tunggu dulu 🤔, bukannya ini sama aja yah dengan melampirkan password? 😅 Cuma diganti ke token saja.

Oke, ketemu Encrypted Variables, atau biasa disebut Secrets. Nah, ternyata saya bisa menambahkan sebuah variabel rahasia ke dalam repositori dan memanggilnya dari Actions. Misalnya: ${{ secrets.GH_PAGES_TOKEN }}.

Screen-Shot-2019-09-16-at-7.22.00-PM

Berhasil. Token pun aman.

Ternyata mudah jadinya, saya cukup mengubah sedikit Rakefile yang sudah ada https://github.com/id-ruby/id-ruby/pull/121/files untuk menambahkan variabel environment GH_PAGES_TOKEN dan menyertakannya pada langkah berikut:

    - name: Deploy site
      run: bundle exec rake site:publish
      env:
        GH_PAGES_TOKEN: ${{ secrets.GH_PAGES_TOKEN }}

Tadaaa 🎉! Setelah berkali-kali mencoba, akhirnya berhasil!

Screen-Shot-2019-09-16-at-7.20.01-PM

Selamat menikmati 😇


Psst... masih ada sedikit tiket RubyConf Indonesia, lho. 👉 https://ruby.id/ticket

Mastodon