Talen en builds aanpassen voor codescans
CodeQL-codescans ondersteunen standaard veel talen met een functie voor automatisch bouwen. Als uw code gebruikmaakt van een niet-standaard buildproces, moet u mogelijk uw werkstroom aanpassen met aangepaste buildstappen.
In deze les wordt beschreven hoe u de talen die worden geanalyseerd door codescans kunt wijzigen en hoe u aangepaste buildstappen toevoegt aan een codeQL-codescanwerkstroom.
De talen wijzigen die worden geanalyseerd
CodeQL-codescan detecteert automatisch code die is geschreven in de volgende ondersteunde talen: C/C++, C#, Go, Java, JavaScript/TypeScript, Python en Ruby.
Notitie
CodeQL werkt de ondersteunde talen en frameworks voortdurend bij voor een volledige lijst met beschikbare talen, varianten en compilers. Raadpleeg de documentatie[7].
Het standaardwerkstroombestand voor CodeQL-analyse bevat een buildmatrix met de naam taal waarin de talen in uw opslagplaats worden vermeld die worden geanalyseerd. CodeQL vult deze matrix automatisch in wanneer u codescans toevoegt aan een opslagplaats. Met behulp van de taalmatrix optimaliseert u CodeQL om elke analyse parallel uit te voeren. We raden u aan alle werkstromen aan te passen aan deze configuratie vanwege de prestatievoordelen van het parallelliseren van builds.
Als uw opslagplaats code bevat in meer dan een van de ondersteunde talen, kunt u kiezen welke talen u wilt analyseren. Er zijn verschillende redenen waarom u wilt voorkomen dat een taal wordt geanalyseerd. Het project kan bijvoorbeeld afhankelijkheden hebben in een andere taal dan de hoofdtekst van uw code en u ziet mogelijk liever geen waarschuwingen voor deze afhankelijkheden.
Als uw werkstroom gebruikmaakt van de taalmatrix, wordt CodeQL vastgelegd om alleen de talen in de matrix te analyseren. Als u de talen wilt wijzigen die u wilt analyseren, bewerkt u de waarde van de matrixvariabele. U kunt een taal verwijderen om te voorkomen dat deze wordt geanalyseerd of u kunt een taal toevoegen die niet aanwezig was in de opslagplaats toen codescans waren ingesteld. Als de opslagplaats bijvoorbeeld in eerste instantie alleen JavaScript bevatte toen codescans waren ingesteld en u later Python-code hebt toegevoegd, moet u deze toevoegen python aan de matrix.
jobs:
analyze:
name: Analyze
...
strategy:
fail-fast: false
matrix:
language: ['javascript', 'python']
Als uw werkstroom geen matrix met de naam taal bevat, is CodeQL geconfigureerd voor het sequentieel uitvoeren van analyse. Als u geen talen in de werkstroom opgeeft, detecteert en probeert CodeQL automatisch ondersteunde talen in de opslagplaats te analyseren. Als u wilt kiezen welke talen u wilt analyseren zonder een matrix te gebruiken, kunt u de parameter talen onder de init actie gebruiken.
- uses: github/codeql-action/init@v1
with:
languages: cpp, csharp, python
Aangepaste buildstappen voor codescans
Voor de ondersteunde gecompileerde talen kunt u de autobuildactie in de CodeQL-analysewerkstroom gebruiken om uw code te bouwen. Dit voorkomt dat u expliciete buildopdrachten moet opgeven voor C/C++, C# en Java. CodeQL voert ook een build uit voor Go-projecten om het project in te stellen. In tegenstelling tot de andere gecompileerde talen worden echter alle Go-bestanden in de opslagplaats geëxtraheerd, niet alleen de bestanden die zijn gebouwd. U kunt aangepaste buildopdrachten gebruiken om go-bestanden over te slaan die niet door de build worden aangeraakt.
Buildstappen voor een gecompileerde taal toevoegen
Als de C/C++-, C#- of Java-code in uw opslagplaats een niet-standaard buildproces heeft, autobuild kan dit mislukken. U moet de autobuild stap uit de werkstroom verwijderen en handmatig buildstappen toevoegen.
Nadat u de stap hebt autobuild verwijderd, verwijdert u de opmerkingen bij de uitvoeringsstap en voegt u buildopdrachten toe die geschikt zijn voor uw opslagplaats. De stap voor het uitvoeren van de werkstroom voert opdrachtregelprogramma's uit met behulp van de shell van het besturingssysteem. U kunt deze opdrachten wijzigen en meer opdrachten toevoegen om het buildproces aan te passen.
- run: |
make bootstrap
make release
Als uw opslagplaats meerdere gecompileerde talen bevat, kunt u taalspecifieke buildopdrachten opgeven. Als uw opslagplaats bijvoorbeeld C/C++, C# en Java bevat en autobuild C/C++ en C# correct bouwt, maar Java niet kan bouwen, kunt u na de init-stap de volgende configuratie in uw werkstroom gebruiken. Hiermee geeft u buildstappen voor Java op terwijl deze nog steeds worden gebruikt autobuild voor C/C++ en C#:
- if: matrix.language == 'cpp' || matrix.language == 'csharp'
name: Autobuild
uses: github/codeql-action/autobuild@v1
- if: matrix.language == 'java'
name: Build Java
run: |
make bootstrap
make release