Minulla on melko pitkä kokemus GitHubin työnkulkuista, mutta en siihen pisteeseen asti, jossa voin väittää olevani asiantuntija. Mitä ovat Githubin työnkulut? Työnkulku on konfiguroitavissa oleva automatisoitu prosessi, joka suorittaa yhden tai useamman tehtävän. Työnkulut määritetään YAML-tiedostolla, joka on kirjattu tallennukseen, ja ne suoritetaan, kun tallennuksessa oleva tapahtuma käynnistää ne, tai ne voidaan käynnistää manuaalisesti tai määritellyllä aikataululla. Työnkulut määritellään tallennuksessa olevassa .github/workflows -kansiossa. Tallennuksessa voi olla useita työnkulkuja, joista jokainen voi suorittaa eri tehtävien joukon, kuten: Rakentaminen ja testaus pull pyynnöt Sovelluksen käyttöönotto aina, kun julkaisu luodaan Merkinnän lisääminen aina, kun uusi ongelma avataan Työnkulkuja koskevat A on Työnkulut määritetään YAML-tiedostolla, joka on kirjattu tallennukseen, ja ne käynnistyvät, kun ne on käynnistänyt tallennuksessa oleva tapahtuma, tai ne voidaan käynnistää manuaalisesti tai määritellyllä aikataululla. workflow Työnkulut on määritelty Rekisterissä voi olla useita työnkulkuja, joista jokainen voi suorittaa eri joukon tehtäviä, kuten: .github/workflows Rakentaminen ja testaus pull pyynnöt Sovelluksen käyttöönotto aina, kun julkaisu luodaan Merkinnän lisääminen aina, kun uusi ongelma avataan Työnkulkuja koskevat Näin ollen työnkulku on verrattavissa Jenkinsin tehtävään, joka toteutetaan XML:n sijaan YAML:ssä. , toisin kuin vanha Jenkinsin työn kokoonpano. Se ei näytä paljon, mutta se mahdollistaa lähestymistapojen käyttämisen lähdekoodin hallintaan, mukaan lukien versiointi ja kääntäminen taaksepäin. Vuosia sitten työskentelin asiakkaalle, jonka DevOps-tiimi toteutti Puppet-pohjaisen lähestymistavan Jenkinsin työpaikkojen rekonstruoimiseksi niin, että Puppet-konfig voidaan tallentaa Gitiin. stored inside the code repository Huomaa, että GitHub oli melko myöhässä puolueelle. Ennen kuin se toteutti työnkulkuja, käytin kolmannen osapuolen palvelua nimeltä Vaihdoin pääasiassa siksi, että Travis tuli maksetuksi ja toissijaisesti siksi, että työnkulut ovat luontaisesti osa GitHubia. Travis on Tässä vinkki: Niitä kutsutaan GitHubin toimet ovat täysin erilaisia. Use the correct semantics Githubin työnkulku GitHub toiminnot GitHubin työnkulut koostuvat jotka itse koostuvat Vaiheet viittaus Ohjeet ja muutama valinnainen parametri, mukaan lukien nimi. työpaikkoja askeleita juokseminen jobs: metrics: runs-on: my-image #1 steps: - name: Install dependencies via Poetry #2 run: poetry install #3 OCI-kuva, jossa työnkulku toimii Vaiheen nimi Askel komentoon GitHub-toimet ovat uudelleenkäytettäviä komponentteja, jotka tarjoavat vaihtoehtoja saman komennon toistamiseen yhä uudelleen. Toiminto on ennalta määritelty, uudelleenkäytettävä joukko tehtäviä tai koodia, joka suorittaa tiettyjä tehtäviä työnkulun sisällä, mikä vähentää toistuvan koodin määrää, jonka kirjoitat työnkulun tiedostoihin. Poista Git-tallennus Githubista Oikean työkaluketjun asentaminen rakennusympäristöön Autenttisuuden määrittäminen pilvipalveluntarjoajallesi Voit kirjoittaa omia toimintoja tai löytää toimintoja, joita voit käyttää työnkulkuissasi GitHub Marketplace -sivustossa. Esimerkiksi git checkoutin suorittamisen sijaan voit käyttää checkout-toimintoa. GitHub toiminnot Yksi on ennalta määritelty, uudelleenkäytettävä joukko tehtäviä tai koodia, joka suorittaa tiettyjä tehtäviä vähentää toistuvien koodien määrää, jonka kirjoitat työnkulkutiedostoihin.Toimet voivat suorittaa esimerkiksi seuraavia tehtäviä: action workflow Poista Git-tallennus Githubista Oikean työkaluketjun asentaminen rakennusympäristöön Autenttisuuden määrittäminen pilvipalveluntarjoajallesi Voit kirjoittaa omia toimintoja tai etsiä toimintoja, joita voit käyttää työnkulkuissasi. Esimerkiksi sen sijaan, että käytettäisiin Voit käyttää sitä . Github Markkinointi git checkout Checkout toiminta GitHub toiminnot jobs: metrics: runs-on: my-image steps: - uses: actions/checkout@v5 #1 with: #2 fetch-depth: 0 submodules: recursive Viittaus GitHub-toimintaan Toimintaparametrit Olen suuri fani, joka ei keksi pyörää uudelleen. GitHub-toimilla on suuri rooli tässä. Tässä vinkki: Kun mahdollista Prefer GitHub Actions over ad-hoc commands Oikean toiminnan valitseminen GitHub Marketplace -palvelun ylläpitäjät Toimet on lueteltu luokkien mukaan. Voit suodattaa luojan tyypin mukaan ja lajitella suosion mukaan. Paljon toimia Kun valitset toimenpiteen, sinun pitäisi huolehtia samalla tavalla kuin mikä tahansa muu riippuvuus. Tässä on muutama kriteeri auttaa sinua: Vendor: prefer verified creators License type: Open Source vs. closed source. With the former, check the exact terms; the Apache v2 license is very different from the GPL one. Pricing for commercial actions Check the source code repository of actions that display it and check the following information: ** Inception date ** Activity, including the repartition of commits per committer, the number of open issues, the mean time for fixing issues, etc. ** Documentation (reference material, tutorials, how-to guides, and explanations) Community, if any Support Tässä vinkki: Be as careful in choosing a GitHub Action as in choosing any other dependency. Tiedä tekosi Kuten edellinen vihje, tämä johtuu yleisemmästä - puhun kokemuksesta. Kehitin työnkulkua Java-sovelluksen pakkaamiseen. Käytin työnkulkua paljon, ja tehtävänä oli ladata riippuvuudet jokaisessa käynnissä. jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: actions/setup-java@v4 #1 with: distribution: temurin java-version: 21 - uses: actions/cache@v4 #2 with: path: ~/.m2/repository #3 key: ${{ platform }}-maven--${{ hashFiles('**/pom.xml') }} #4 restore-keys: | ${{ runner.os }}-maven- #4 Asenna JDK Aseta välimuisti. välimuisti on yleinen ja voi välittää tiedostoja eri toimintojen välillä. Käytä paikallista Maven-tallennustilaa Cache-riippuvuudet. Avain käyttää juoksijan käyttöjärjestelmää, joka ei muutu, ja POM: n hash. Näin ollen vaihe luo uuden välimuistin joka kerta, kun POM muuttuu. Kuitenkin, lukemalla dokumentaatiota, tajusin, että voisin saavuttaa saman paljon yksinkertaisemmalla tavalla: Toiminnolla on sisäänrakennettu toiminnallisuus välimuistiin tallentamiseen ja riippuvuuksien palauttamiseen. Se käyttää työkalupakettia/välimuistiin tallentamiseen riippuvuuksien välimuistiin tallentamiseen, mutta vaatii vähemmän konfigurointiasetuksia. Tuetut pakettien hallitsijat ovat gradle, maven ja sbt. Käytetyn välimuistiavaimen muoto on setup-java-${plattform }}-${packageManager }}-${fileHash }}, jossa hash perustuu seuraaviin tiedostoihin: MAVEN: * ja .xml Caching pakettien riippuvuudet Toimenpiteellä on sisäänrakennettu toiminnallisuus välimuistiin ja riippuvuuksien palauttamiseen. Se käyttää työkalupakettia / välimuistia kappaleen alla välimuistiin riippuvuuksien välimuistiin, mutta vaatii vähemmän konfigurointiasetuksia. Tuetut paketinhoitajat ovat gradle, maven ja sbt. Käytetyn välimuistiavaimen muoto on , jossa hash perustuu seuraaviin tiedostoihin: setup-java-${{ platform }}-${{ packageManager }}-${{ fileHash }} MAVEN: * ja .xml Caching pakettien riippuvuudet Korvasin edellä esitetyn kappaleen seuraavalla: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: actions/setup-java@v4 with: distribution: temurin java-version: 21 cache: maven #1 Tämä on se Tässä vinkki: Tunnin dokumenttien tekeminen voi auttaa sinua säästämään työpäiviä. Thoroughly read the documentation of actions. Pin riippuvuus versio Tässä osiossa käsitellään myös yleisiä neuvoja ja sovelletaan niitä GitHubin työnkulkujen versioon. Löydät versioita vähintään kahdessa paikassa: OCI-kuva ja GitHub Actionsin versio. Olet ehkä huomannut, että edellä mainituissa kappaleissa.Kirjoittamishetkellä tämä viittaa Kun aika kuluu, se osoittaa uusimman version, jossa on eri kirjastojen versioita. Se voi aiheuttaa virheen työnkulun suorittamisen aikana tai pahempaa, muuttaa tuotetta tavalla, jota et huomaa, kunnes se on liian myöhäistä. [Kaikki kuvat ovat käytettävissä] runs-on: ubuntu-latest ubuntu-24.04 https://github.com/actions/runner-images Toimenpiteiden versiointi toimii eri tavalla, koska ne osoittavat GitHub-repon viittauksen: joko tunnuksen tai komission SHA. Vaikka OCI-kuva on GitHubin käsissä, toiminta on sen tarjoajan vastuulla. Se tarkoittaa, että kuka tahansa, jolla on komission oikeudet, voi muuttaa taustalla olevan tunnuksen sisältöä. Pin on komento. must jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903 #1 Pin tietylle komitealle 💡 Vihje: Ota turvallisuus vakavasti ja pin actions to a specific commit. Käytä työn yhteenvetoa Jokainen työnkulun vaihe tuottaa todennäköisesti paljon lokeja. Säännöllisessä työnkulussa lokilinjojen kokonaismäärä voi olla melko valtava. Jotkut niistä voivat olla hyödyllisiä, jotkut eivät ehkä ole, mutta koska on vain vakiotuotto ja vakiovirhe, kaikki päättyy samaan paikkaan. , testin suorittamisen määrä tai koodin kattavuuden prosenttiosuus, jos et lähetä näitä tietoja jonnekin muualle. GitHub helpottaa haluamasi tietojen lisäämistä työyhteenvetoon. Jäsen G Voit käyttää työn yhteenvetoja näyttämään ja ryhmittämään ainutlaatuista sisältöä, kuten testitulosten yhteenvetoja, niin, että joku, joka tarkastelee työnkulun suorittamisen tulosta, ei tarvitse mennä lokeihin nähdäksesi tärkeitä suoritukseen liittyviä tietoja, kuten epäonnistumisia. Työyhteenveto tukee Githubin maustamaa Markdownia, ja voit lisätä Markdown-sisällön askel askeleelta GITHUB_STEP_SUMMARY-ympäristötiedostoon. Lisää työpaikan tiivistelmä Voit käyttää työn yhteenvetoja näyttämään ja ryhmittämään ainutlaatuista sisältöä, kuten testitulosten yhteenvetoja, niin, että joku, joka tarkastelee työnkulun suorittamisen tulosta, ei tarvitse mennä lokeihin nähdäksesi tärkeitä suoritukseen liittyviä tietoja, kuten epäonnistumisia. Työselostukset tukevat GitHubin maustamaa Markdownia, ja voit lisätä Markdown-sisällön askel askeleelta Ympäristötiedosto Se on ainutlaatuinen jokaiselle askeleelle työssä. GITHUB_STEP_SUMMARY GITHUB_STEP_SUMMARY Lisää työpaikan tiivistelmä Tässä on a Lisää Apache Arrow: Näytteitä - name: Show inputs run: | echo "upload_artifacts: ${{ inputs.upload_artifacts }}" >> $GITHUB_STEP_SUMMARY echo "schedule: ${{ github.event.schedule }}" >> $GITHUB_STEP_SUMMARY echo "ref: ${{ github.ref }}" >> $GITHUB_STEP_SUMMARY Sillä Se on: tulos Tässä vinkki: Kehittäjien kokemuksen parantaminen. Use GitHub job summary Ymmärrä työnkulkujen elinkaari Työnkulut suorittavat vaiheet peräkkäin. Epäonnistunut vaihe peruuttaa kaikki jäljellä olevat vaiheet ja työnkulku päättyy Edellä olevassa esimerkissä se tarkoittaa, että emme saa testin yhteenvetoa ollenkaan, jos jokin seuraavista vaiheista epäonnistuu. edellytyksenä on Failure if Voit käyttää seuraavia tilan tarkistustoimintoja ilmaisuna jos ehdolliset. Oletusarvoinen onnistumisen tilan tarkistus() on käytössä, ellet sisällytä jotakin näistä toiminnoista. Status Check -toiminnot Voit käyttää seuraavia tilan tarkistustoimintoja ilmaisuina Oletusarvoinen tilan tarkistus käytetään, ellet sisällä yhtä näistä toiminnoista. if success() Status Check -toiminnot GitHub käyttää oletusarvoisesti, mutta vaihtoehdot sisältävät ja ja . success() always() cancelled() failure() - name: Show inputs if: ${{ always() }} #1 run: | echo "upload_artifacts: ${{ inputs.upload_artifacts }}" >> $GITHUB_STEP_SUMMARY echo "schedule: ${{ github.event.schedule }}" >> $GITHUB_STEP_SUMMARY echo "ref: ${{ github.ref }}" >> $GITHUB_STEP_SUMMARY Aina suorittaa askel, riippumatta siitä, onko edellinen askel onnistunut tai ei. Kuvittele seuraava sekvenssi: - name: Step that may fail run: whatever - name: Execute unit tests run: ./mvnw -B test #1 - name: Test Summary if: ${{ always() }} uses: test-summary/action@31493c7 #2 Käynnissä olevat yksikötestit tuottavat myös JUnit-raportteja Käytä luotuja JUnit-raportteja vaiheiden yhteenvedon kirjoittamiseen Jos ensimmäinen vaihe epäonnistuu, yhteenveto suoritetaan riippumatta siitä, onko testejä suoritettu. Jos ne eivät, se epäonnistuu. Tämän välttämiseksi meidän on hienosäädettävä ehtoa edelleen niin, että yhteenveto-vaihe suoritetaan vain, jos yksikkökokeen vaihe teki. - name: Step that may fail run: whatever - name: Execute unit tests id: test #1 run: ./mvnw -B test - name: Test Summary if: ${{ always() && steps.test.conclusion == 'success'}} #2 uses: test-summary/action@31493c7 Aseta askeleen ID Käynnistä vain, jos testin vaihe on onnistunut Se on vain yksinkertainen esimerkki, mutta se tarjoaa mielenkiintoisia vaihtoehtoja. Tässä vinkki: Käytä sitä eduksi. Know workflows' lifecycle Testaa paikallisesti Monet organisaatiot panevat täytäntöön tiukat GitHub-säännöt. Yleisin on se, että et voi työntää : Jokaisen komitean on läpäistävä vetopyyntö. Vaikka se on järkevää vakiintuneille hankkeille, se estää aloittamasta hankkeita iteroimasta nopeasti säilyttäen komitean historian. master Seuraavaksi tulee toimintasuunnitelma: ”Ajattele globaalisti, toimi paikallisesti” Käynnistä GitHubin toiminnot paikallisesti! Miksi haluat tehdä tämän? - Rather than having to commit/push every time you want to test out the changes you are making to your files (or for any changes to embedded GitHub actions), you can use act to run the actions locally. The environment variables and filesystem are all configured to match what GitHub provides. Fast Feedback .github/workflows/ - I love make. However, I also hate repeating myself. With , you can use the GitHub Actions defined in your to replace your ! Local Task Runner act .github/workflows/ Makefile • Johdatus toimintaan ”Ajattele globaalisti, toimi paikallisesti” Käynnistä GitHubin toiminnot paikallisesti! Miksi haluat tehdä tämän? Nopea palaute - Sen sijaan, että joudut tekemään / työntämään joka kerta, kun haluat testata tekemäsi muutokset .github / työnkulkuihin / tiedostoihin (tai kaikki muutokset upotettuihin GitHub-toimiin), voit käyttää toimintaa toimien suorittamiseen paikallisesti. Local Task Runner - Rakastan tehdä. Kuitenkin myös inhoan toistaa itseäni. Toiminnalla voit käyttää GitHub-toimia, jotka on määritelty .github/workflows/ korvata Makefile! • Johdatus toimintaan on GitHubin CLI-integraatio, joka laukaisee työnkulun oikean tapahtuman mukaan. act gh act push Tässä on tulos, kun kuvat ja toimet on jo ladattu: INFO[0000] Using docker host 'unix:///var/run/docker.sock', and daemon socket 'unix:///var/run/docker.sock' [workflow.yml/test] ⭐ Run Set up job [workflow.yml/test] 🚀 Start image=catthehacker/ubuntu:act-22.04 [workflow.yml/test] 🐳 docker pull image=catthehacker/ubuntu:act-22.04 platform= username= forcePull=true [workflow.yml/test] 🐳 docker create image=catthehacker/ubuntu:act-22.04 platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] network="host" [workflow.yml/test] 🐳 docker run image=catthehacker/ubuntu:act-22.04 platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] network="host" [workflow.yml/test] 🐳 docker exec cmd=[node --no-warnings -e console.log(process.execPath)] user= workdir= [workflow.yml/test] ✅ Success - Set up job [workflow.yml/test] ☁ git clone 'https://github.com/actions/setup-java' # ref=v4 [workflow.yml/test] ⭐ Run Main actions/checkout@v4 [workflow.yml/test] 🐳 docker cp src=/Users/nico/projects/act-sample/. dst=/Users/nico/projects/act-sample [workflow.yml/test] ✅ Success - Main actions/checkout@v4 [9.211777902s] [workflow.yml/test] ⭐ Run Main Setup JDK [workflow.yml/test] 🐳 docker cp src=/home/nico/.cache/act/actions-setup-java@v4/ dst=/var/run/act/actions/actions-setup-java@v4/ [workflow.yml/test] 🐳 docker exec cmd=[/opt/acttoolcache/node/18.20.8/x64/bin/node /var/run/act/actions/actions-setup-java@v4/dist/setup/index.js] user= workdir= [workflow.yml/test] ❓ ::group::Installed distributions | Resolved Java 21.0.8+9.0.LTS from tool-cache | Setting Java 21.0.8+9.0.LTS as the default | Creating toolchains.xml for JDK version 21 from temurin | Writing to /root/.m2/toolchains.xml | | Java configuration: | Distribution: temurin | Version: 21.0.8+9.0.LTS | Path: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.8-9.0.LTS/x64 | [workflow.yml/test] ❓ ::endgroup:: [workflow.yml/test] ❓ add-matcher /run/act/actions/actions-setup-java@v4/.github/java.json | Creating settings.xml with server-id: github | Writing to /root/.m2/settings.xml [workflow.yml/test] ⚙ *** | Cache Size: ~50 MB (52710428 B) | [command]/usr/bin/tar -xf /tmp/c8ef4803-85c1-4867-ac2d-442dbce79755/cache.tzst -P -C /Users/nico/projects/act-sample --use-compress-program unzstd | Cache restored successfully | Cache restored from key: setup-java-linux-x64-maven-ef0e54e9035c18b60db7ea0af5e2f0c4cc5445dd6a2a2a672b91e14f14e7e4c2 [workflow.yml/test] ✅ Success - Main Setup JDK [2.514565962s] [workflow.yml/test] ⚙ ::set-env:: JAVA_HOME=/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.8-9.0.LTS/x64 [workflow.yml/test] ⚙ ::set-env:: JAVA_HOME_21_X64=/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.8-9.0.LTS/x64 [workflow.yml/test] ⚙ ::set-output:: distribution=Temurin-Hotspot [workflow.yml/test] ⚙ ::set-output:: path=/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.8-9.0.LTS/x64 [workflow.yml/test] ⚙ ::set-output:: version=21.0.8+9.0.LTS [workflow.yml/test] ⚙ ::set-output:: cache-hit=false [workflow.yml/test] ⚙ ::add-path:: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.8-9.0.LTS/x64/bin [workflow.yml/test] ⭐ Run Main Run "fast" tests [workflow.yml/test] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/2] user= workdir= | [INFO] Scanning for projects... | [INFO] | [INFO] ----< ch.frankel.blog:act-sample >----- | [INFO] Building act-sample 1.0-SNAPSHOT | [INFO] from pom.xml | [INFO] ------------------------[ jar ]------------------------- | [INFO] | [INFO] --- resources:3.3.1:resources (default-resources) @ act-sample --- | [INFO] Copying 1 resource from src/main/resources to target/classes | [INFO] | [INFO] --- compiler:3.14.0:compile (default-compile) @ act-sample --- | [INFO] Recompiling the module because of changed source code. | [INFO] Compiling 5 source files with javac [debug target 21] to target/classes | [INFO] | [INFO] --- resources:3.3.1:testResources (default-testResources) @ act-sample --- | [INFO] Copying 2 resources from src/test/resources to target/test-classes | [INFO] | [INFO] --- compiler:3.14.0:testCompile (default-testCompile) @ act-sample --- | [INFO] Recompiling the module because of changed dependency. | [INFO] Compiling 1 source file with javac [debug target 21] to target/test-classes | [INFO] | [INFO] --- surefire:3.2.5:test (default-test) @ act-sample --- | [INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider | [INFO] | [INFO] ------------------------------------------ | [INFO] T E S T S | [INFO] ------------------------------------------ | [INFO] Running ch.frankel.blog.ActSampleTest | [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.120 s -- in ch.frankel.blog.ActSampleTest | [INFO] | [INFO] Results: | [INFO] | [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 | [INFO] | [INFO] ------------------------------------------------------ | [INFO] BUILD SUCCESS | [INFO] ------------------------------------------------------ | [INFO] Total time: 3.318 s | [INFO] Finished at: 2025-08-22T10:26:29Z | [INFO] ------------------------------------------------------ [workflow.yml/test] ✅ Success - Main Run "fast" tests [20.920776212s] [workflow.yml/test] ⭐ Run Post Setup JDK [workflow.yml/test] 🐳 docker exec cmd=[/opt/acttoolcache/node/18.20.8/x64/bin/node /var/run/act/actions/actions-setup-java@v4/dist/cleanup/index.js] user= workdir= | [command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /Users/nico/projects/act-sample --files-from manifest.txt --use-compress-program zstdmt | Cache Size: ~50 MB (52701753 B) | Cache saved successfully | Cache saved with the key: setup-java-Linux-x64-maven-ef0e54e9035c18b60db7ea0af5e2f0c4cc5445dd6a2a2a672b91e14f14e7e4c2 [workflow.yml/test] ✅ Success - Post Setup JDK [1.01412383s] [workflow.yml/test] ⭐ Run Complete job [workflow.yml/test] Cleaning up container for job test [workflow.yml/test] ✅ Success - Complete job [workflow.yml/test] 🏁 Job succeeded Voisin kirjoittaa pari postausta Jätän teidät lukemaan dokumentin. act Tässä vinkki: Vähennä palautteen syklin aikaa. Test your workflows locally Yhteenveto Käytä oikeaa semantiikkaa, erottele työnkulkuja ja toimintoja. Mieluummin GitHub-toimet kuin ad-hoc-komennot. Ole yhtä varovainen GitHub-toiminnan valinnassa kuin minkä tahansa muun riippuvuuden valinnassa. Lue huolellisesti kunkin käyttämäsi toimenpiteen dokumentaatio. Pin-toiminnot tietylle komitealle. Käytä GitHubin työselostetta kehittäjän kokemuksen parantamiseksi. Tiedä työnkulkujen elinkaari. Testaa työnkulkuasi paikallisesti. To go further: Työnkulkuja koskevat GitHub toiminnot GitHubin toiminta-alue Runner kuvat Lisää työpaikan tiivistelmä Status Check -toiminnot Johdatus toimintaan