Jak wymusić kompilację stron GitHub?

109

Każde repozytorium GitHub może mieć ( lub być ) witryną GitHub Pages , którą można zbudować za pomocą Jekyll. GitHub buduje witrynę za każdym razem, gdy wypychasz nowe zatwierdzenie.
Czy istnieje sposób na wymuszenie odświeżenia witryny Github Pages bez wprowadzania nowego zatwierdzenia?

Pierre Prinetti
źródło
Może jest to zgodne z ich polityką pamięci podręcznej? ( stackoverflow.com/a/13106972/6309 )
VonC,
2
Właściwie możesz skontaktować się z pomocą techniczną GitHub w celu potwierdzenia i opublikować odpowiedź tutaj. To mogłoby pomóc innym.
VonC,
1
Zgodnie z dokumentacją , strony github mają limit 10 kompilacji na godzinę. Z mojego doświadczenia wynika, że ​​jeśli przekroczysz limit, nowa kompilacja nie zostanie uruchomiona, nawet jeśli naciśniesz nowe zatwierdzenie.
Jakub Kukul

Odpowiedzi:

151

Ze wsparcia GitHub, 07.06.2014:

Obecnie nie jest możliwe ręczne wywołanie przebudowy bez wypychania zatwierdzenia do odpowiedniej gałęzi.


Edytować:

Jak zauważył Andy w komentarzach, możesz wypchnąć pusty zatwierdzenie poleceniem:

git commit -m 'rebuild pages' --allow-empty
git push origin <branch-name>

Edycja 2:

Dzięki działaniom GitHub dość łatwo jest uruchomić codzienną publikację: https://stackoverflow.com/a/61706020/4548500 .

Pierre Prinetti
źródło
3
Jeśli masz szczęście, jak ja, sprawdź również status Github, ponieważ mogą nie działać lub mieć problemy z zadaniami / kompilacjami w tle.
f01
tl, drgit log
nilon
20

Jeśli potrzebujesz szybkiego rozwiązania skryptowego, oto jest. Po prostu wykonaj poniższe zadania tylko raz i uruchom skrypt, gdy chcesz odbudować swoją stronę GitHub.

1. Utwórz osobisty token dostępu dla wiersza poleceń:

  • Postępuj zgodnie z oficjalną pomocą tutaj, aby utworzyć osobisty token dostępu. Zasadniczo, musisz zalogować się na koncie GitHub i przejdź do: Settings > Developer settings > Personal access tokens > Generate new token.
  • Zaznacz repozakres.
  • Skopiuj token.

2. Utwórz następujący skrypt:

  • Utwórz plik o nazwie RebuildPage.shi dodaj linie:

    #!/bin/bash
    curl -u yourname:yourtoken -X POST https://api.github.com/repos/yourname/yourrepo/pages/builds
    

    Tutaj,

    • Zastąp yournameswoją nazwą użytkownika GitHub.
    • Zastąp yourtokenskopiowanym osobistym tokenem dostępu.
    • Zastąp yourreponazwą swojego repozytorium.

3. Uruchom skrypt:

  • Jeśli używasz systemu Windows 10:

    • Musisz skonfigurować podsystem Windows dla systemu Linux , jeśli nie zostało to jeszcze zrobione. Postępuj zgodnie z tym aby zrobić.
    • Usuń pierwszą linię ( #!/bin/bash) ze skryptu i zapisz skrypt jako RebuildPage.bat. (tj zastąpić .shze .batw nazwie pliku skryptu)
    • Alternatywa dla powyższego punktu: Aby uzyskać funkcję dwukrotnego kliknięcia w celu uruchomienia .shpliku:

      • Ustaw bash.exejako domyślny program dla .shplików.
      • Otwórz regedit.exei edytuj HKEY_CLASSES_ROOT\Applications\bash.exe\shell\open\command. Ustaw (Default)wartość na:

        "C:\Windows\System32\bash.exe" -c " \"./$(grep -oE '[^\\]+$' <<< '%L')\";"
        
    • Teraz kliknij dwukrotnie skrypt, gdy chcesz odbudować swoją stronę GitHub. Gotowe!

  • Jeśli używasz systemu Linux / Mac, uruchomienie skryptu jest takie samo, jak uruchomienie innych skryptów. Gotowe!

Dodatkowe uwagi do rozwiązania:

To rozwiązanie wykorzystuje interfejs API GitHub REST API v3. Oto oficjalna dokumentacja API.

arnobpl
źródło
7

Miałem ten problem przez jakiś czas i pchnięcie na gałąź główną nic nie zmieniło myapp.github.ioz dwóch powodów:

1 - Zbuduj

Bez względu na to, ile razy próbowałem wcisnąć swoją pracę na master, kompilacja się nie rozpoczęła. Znalazłem obejście, modyfikując mój plik w edytorze online Github (otwórz swój plik index.html i edytuj go na stronie Github, a następnie zatwierdź)

2 - Problemy z buforowaniem

Nawet po udanej kompilacji nadal widzę tę samą stronę myapp.github.io, a trudne przeładowanie Ctrl + Shift + Rnie rozwiązałoby problemu. Zamiast tego, jeśli używasz przeglądarki Chrome, sprawdź swoją stronę, Applicationprzejdź do zakładki, wybierz „Wyczyść pamięć” w menu po lewej stronie i kliknij „Wyczyść dane witryny” u dołu menu.

Pierre Olivier Tran
źródło
6

Teraz, gdy akcje GitHub są dostępne, jest to trywialne:

# File: .github/workflows/refresh.yml
name: Refresh

on:
  schedule:
    - cron:  '0 3 * * *' # Runs every day at 3am

jobs:
  refresh:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger GitHub pages rebuild
        run: |
          curl --fail --request POST \
            --url https://api.github.com/repos/${{ github.repository }}/pages/builds \
            --header "Authorization: Bearer $USER_TOKEN"
        env:
          # You must create a personal token with repo access as GitHub does
          # not yet support server-to-server page builds.
          USER_TOKEN: ${{ secrets.USER_TOKEN }}

Przykładowe repozytorium, które to robi: https://github.com/SUPERCILEX/personal-website/actions

Pages API: https://developer.github.com/v3/repos/pages/#request-a-page-build

SUPERCILEX
źródło
5

Nawet po przesłaniu zmian do repozytorium GitHub nie mogłem ich dzisiaj zobaczyć. Następnie sprawdziłem ustawienia repozytorium, aby uzyskać więcej informacji, widziałem, że przez wszystkie te czasy kompilacja się nie udała i to było powodem, dla którego nie byłem w stanie zobaczyć zmian.

wprowadź opis obrazu tutaj

Możesz również zobaczyć komunikat „Twoja witryna ma problemy z budowaniem: Nie można utworzyć strony. Spróbuj ponownie później”.

Następnie sprawdzałem moje ostatnie zatwierdzenia i próbowałem dowiedzieć się, co powoduje ten problem. W końcu udało mi się rozwiązać problem.

wprowadź opis obrazu tutaj

W tagach (,) był dodatkowy przecinek i to spowodowało ten problem .

wprowadź opis obrazu tutaj

Nie otrzymasz odpowiednich komunikatów o błędach, jeśli w pliku .md są jakieś problemy. Zalecam sprawdzenie stanu kompilacji i porównanie zmian, jeśli napotykasz ten sam problem.

Sibeesh Venu
źródło
4

Puste zatwierdzenie nie działało dla mnie, ale w oparciu o odpowiedź @benett działało to dla mnie:

Otwórz Postman, utwórz nowe żądanie z tym adresem URL: https://api.github.com/repos/[user_name]/[repo_name]/pages/builds (zamień na swoje imię i repozytorium) i wybierz metodę POST.

Przed uruchomieniem przejdź do headerszakładki i dodaj nowy klucz Acceptz wartościąapplication/vnd.github.mister-fantastic-preview+json

Teraz możesz go uruchomić i ponownie odwiedzić swoje strony.

antoni
źródło
U mnie to nie działa, rozumiem { "message": "Not Found", "documentation_url": "https://developer.github.com/v3/repos/pages/#request-a-page-build" }. Może dlatego, że moje repozytorium jest prywatne?
Coburn
0

Alternatywne rozwiązanie

Być może otrzymałeś wiadomość e-mail z GitHub z informacją, że Jekyll nie zdołał zbudować Twojej witryny, gdy przekazałeś ją do gh-pages. W takim przypadku możesz spróbować wymusić naciśnięcie, aby uruchomić kolejną kompilację.

Jeśli używasz dedykowanego folderu na ostateczną stronę internetową, powiedzmy public, możesz spróbować odbudować folder i dodać go do zatwierdzonych zmian. Następnie musisz podzielić ten plik na swoją gh-pagesgałąź i zmusić go do wyzwolenia kolejnej kompilacji, nawet jeśli pliki w ogóle się nie zmieniły. Reszta kodu poniżej usuwa tylko zatwierdzenia dlapublic folderu dla wygody i usuwa go z lokalnego systemu plików.

Kod

git add public
git commit -am ":bug: triggering another jekyll build"
git push origin $(git subtree split --prefix public master):gh-pages --force
git reset HEAD~1
rm -rf public

Porady

Jeśli istnieją niezatwierdzone zmiany, które nie są częścią ostatecznej witryny, możesz je ukryć za pomocą następującego polecenia.

git stash

Następnie wykonaj powyższe polecenie, aby ręcznie wymusić kompilację Jekyll i rozpakować je.

git stash pop

Bibliografia

Amin NAIRI
źródło