Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • hallyn/pmaports
  • sylvieon/pmaports
  • michaszek8/pmaports
  • Faster_Harder_Coder/pmaports
  • lambdadroid/pmaports
  • DolphinChips/pmaports
  • Mis012/pmaports
  • joshas/pmaports
  • ad1217/pmaports
  • a572431863/pmaports
  • PureTryOut/pmaports
  • bshah/pmaports
  • ryang2678/pmaports
  • pparent/pmaports
  • Paakke/pmaports
  • JuniorJPDJ/pmaports
  • blacksoil/pmaports
  • Biont/pmaports
  • NotKit/pmaports
  • rendeko/pmaports
  • plambs/pmaports
  • konradybcio/pmaports
  • unrznbl/pmaports
  • scintill/pmaports
  • Danct12/pmaports
  • j2prime.it4456/pmaports
  • lucaweiss/pmaports
  • mapmot/pmaports
  • pinoaffe/pmaports
  • GrantM11235/pmaports
  • michitux/pmaports
  • k-laus/pmaports
  • zhuowei/pmaports
  • cvbnm90i/pmaports
  • 5ilver/pmaports
  • ilpianista/pmaports
  • julian-goldsmith/pmaports
  • elelel/pmaports
  • deata/pmaports
  • rajpratik71/pmaports
  • magnusgulin/pmaports
  • craftyguy/pmaports
  • JohnBergago/pmaports
  • LawScherzo/pmaports
  • emanueltankovic/pmaports
  • Hacker1245/pmaports
  • Lwrless/pmaports
  • Simmoni/pmaports
  • alistair23/pmaports
  • WilliamO7/pmaports
  • kollienne/pmaports
  • MayeulC/pmaports
  • escoand/pmaports
  • ata2001/pmaports
  • fietsbel/pmaports
  • thejsa/pmaports
  • ghetzel/pmaports
  • benwaffle/pmaports
  • Newbyte/pmaports
  • cerg2010cerg2010/pmaports
  • shuhao/pmaports
  • moosingin3space/pmaports
  • afontain/pmaports
  • mpiatka/pmaports
  • dsosa/pmaports
  • aa13q/pmaports
  • lorendias/pmaports
  • ckiee/pmaports
  • minlexx/pmaports
  • f-izzo/pmaports
  • codeHusky/pmaports
  • dsankouski/pmaports
  • ollieparanoid/pmaports
  • kouryu.lyu/pmaports
  • pangelo/pmaports
  • foldedcascode/pmaports
  • gubson/pmaports
  • knuxify/pmaports
  • Foxtrot47/pmaports
  • takizawa.fumiya/pmaports
  • 0Karakurt0/pmaports
  • nickre/pmaports
  • wolfinabox/pmaports
  • Polynomdivision/pmaports
  • 322997am/pmaports
  • HenriDellal/pmaports
  • Nikolay0054/pmaports
  • neverix/pmaports
  • misaka4e21/pmaports
  • revolutionary/pmaports
  • xc-racer99/pmaports
  • toofar/pmaports
  • heylouiz/pmaports
  • TravMurav/pmaports
  • IdanHoro/pmaports
  • dreemurrs-embedded/postmarketos/pmaports
  • farmatito/pmaports
  • azenla/pmaports
  • daniel83/pmaports
  • jja2000/pmaports
  • Icenowy/pmaports
  • PatrykM13/pmaports
  • pixelc-linux/pmaports
  • Minecrell/pmaports
  • fengjiongmax/pmaports
  • C0rn3j/pmaports
  • gavtherav/pmaports
  • ideasonboard/pmaports
  • feinerer/pmaports
  • VxlerieUwU/pmaports
  • kratz00/pmaports
  • zcs.02/pmaports
  • dylanvanassche/pmaports
  • Johnnyhandsome69/pmaports
  • 0xb000/pmaports
  • madushan1000/pmaports
  • Halamix2/pmaports
  • orsonmmz/pmaports
  • firex62/pmaports
  • Danacus/pmaports
  • Sterrs/pmaports
  • srxl/pmaports
  • BMcCallum/pmaports
  • sonichero/pmaports
  • jdrgg/pmaports
  • AlxndrPsclt/pmaports
  • Fallstar/pmaports
  • dhxx/pmaports
  • ChrispyStrips/pmaports
  • pbgapski/pmaports
  • mishaor/pmaports
  • LibrePhone/pmaports
  • popsdylan/pmaports
  • SirSireesh/pmaports
  • tallero/pmaports
  • Sandstorms/pmaports
  • usuario2o/pmaports
  • ddevault/pmaports
  • xeon-zolt/pmaports
  • george-hopkins/pmaports
  • ExultantMonkey/pmaports
  • red-black-bonsai/pmaports
  • dano.kutka/pmaports
  • sicelo/pmaports
  • cuihao.leo/pmaports
  • archeYR/pmaports
  • xawlw/pmaports
  • genox997/pmaports
  • Funts/pmaports
  • Riesi/pmaports
  • deathmist/pmaports
  • willpewitt/pmaports
  • nanu-c/pmaports
  • cybik/pmaports
  • julianuu/pmaports
  • glomch/pmaports
  • jakubgawix/pmaports
  • mcncm/pmaports
  • calebccff/pmaports
  • pedromoreno/pmaports
  • goshhhy/pmaports
  • bruceblore/pmaports
  • LillyWho/pmaports-dead
  • rambo.dreem.vp500/pmaports
  • gemarcano/pmaports
  • CrimsonFork/pmaports
  • mabope/pmaports
  • rvlander/pmaports
  • nergzd723/pmaports
  • pcercuei/pmaports
  • pikpok/pmaports
  • javabird25/pmaports
  • moham96/pmaports
  • s-8506/pmaports
  • mpertsov/pmaports
  • pascua14/pmaports
  • rxbnDE/pmaports
  • strake888/pmaports
  • BloggerBust/pmaports
  • tttttx21/pmaports
  • nilclass/pmaports
  • lazzardo/pmaports
  • ichernev/pmaports
  • muttley/pmaports
  • GnUfTw/pmaports
  • anjandev/pmaports
  • baonks81/pmaports
  • Raatty/pmaports
  • gyr_os/pitaports
  • Haxk20/pmaports
  • Dynacorp/pmaports
  • armen138/pmaports
  • rjeli/pmaports
  • mans0n/pmaports
  • aweltsch/pmaports
  • CarbonatedCaffeine/pmaports
  • arnavbhatt288/pmaports
  • jetremblay/pmaports
  • jugendhacker/pmaports
  • xela-pmos/pmaports
  • gigenaandrew/pmaports
  • 1Maxnet1/pmaports
  • benclark06/pmaports
  • fabrice.desre/pmaports
  • M0Rf30/pmaports
  • sdm845-mainline/pmaports
  • timbz/pmaports
  • plata-gl/pmaports
  • neutralinsomniac/pmaports
  • foldmorepaper/pmaports
  • incomprehensibleaesthetics/pmaports
  • coltorchen/pmaports
  • Snejp/pmaports
  • Worldblender/pmaports
  • msm8996-mainline/pmaports
  • fbraghiroli/pmaports
  • ashiiish/pmaports
  • milesalan/pmaports
  • abhisheksms97/pmaports
  • heholek/pmaports
  • justinsteffy/pmaports
  • boztradamuz/pmaports
  • unxcepted9/pmaports
  • activlab/pmaports
  • dottdottdott/pmaports
  • empyreal96/pmaports
  • WTechNinja/pmaports
  • atipls/pmaports
  • joeblos/pmaports
  • bdju/pmaports
  • h3ndrik/pmaports
  • realaravinth/pmaports
  • fooforever/pmaports
  • gompa/pmaports
  • naml1t/pmaports
  • MatejLach/pmaports
  • wvffle/pmaports
  • fjc/pmaports
  • Dahrkael/pmaports
  • aostanin/pmaports
  • steils/pmaports
  • Ultra-azu/pmaports
  • 00p513-dev/pmaports
  • Verevka/pmaports
  • Sekhmet/pmaports
  • admicos/pmaports
  • baasmichiel/pmaports
  • santigl/pmaports
  • rmcgu/pmaports
  • sysedwinistrator/pmaports
  • tchx84/pmaports
  • rohmishra1/pmaports
  • alter0ne/pmaports
  • linusw/pmaports
  • AdamBark/pmaports
  • CactiChameleon9/pmaports
  • Tooniis/pmaports
  • thehejik/pmaports
  • kindrat/pmaports
  • rahmanshaber/pmaports
  • corentin-pro/pmaports
  • whiteflag/pmaports
  • em-dash/pmaports
  • gouchi/pmaports
  • oturpe/pmaports
  • ThiagaoPlusPlus/pmaports
  • wose/pmaports
  • djselbeck/pmaports
  • hbjy/pmaports
  • blendergeek/pmaports
  • santeri.pikarinen/pmaports
  • bacardiblack/pmaports
  • akulichalexander/pmaports
  • VitoMinheere/pmaports
  • tigerinus/pmaports
  • Grimler/pmaports
  • proycon/pmaports
  • jmsgfhr/pmaports
  • spholz/pmaports
  • NotLugozzi/pmaports
  • maverickpuss/pmaports
  • joelselvaraj/pmaports
  • antoni.aloytorrens/pmaports
  • jenneron/pmaports
  • vknecht/pmaports
  • CoderCharmander/pmaports
  • devajithvs/pmaports
  • mimi89999/pmaports
  • Dominduchami/pmaports
  • IonAgorria/pmaports
  • edp17/pmaports
  • koutakun/pmaports
  • cherrypicker/pmaports
  • ignapk/pmaports
  • noocsharp/pmaports
  • SUNGOLDSV/pmaports
  • funnykiwi/pmaports
  • teeuwen/pmaports
  • brandsimon/pmaports
  • BobbyTheBuilder/pmaports
  • p1c2u/pmaports
  • mxkrsv/pmaports
  • Error1000/pmaports
  • stev47/pmaports
  • st.s/pmaports
  • rumpel/pmaports
  • msm8916-mainline/pmaports
  • cristian_ci/pmaports
  • jacek.m/pmaports
  • arpio/pmaports
  • p1trson/pmaports
  • alpabrz/pmaports
  • BogdanTheGeek/pmaports
  • ALTracer/pmaports
  • 8osm/pmaports
  • nokun/pmaports
  • Shanduur/pmaports
  • StandaSK/pmaports
  • sebastia111/pmaports
  • juliandehm/pmaports
  • uclydde/pmaports
  • MadnessASAP/pmaports
  • astroanax/pmaports
  • invine/pmaports
  • clamor-s/pmaports
  • FelixLK/pmaports
  • stefan06ro/pmaports
  • knfr/pmaports
  • InsanePrawn/pmaports
  • edwin0cheng/pmaports
  • venji10/pmaports
  • phesch/pmaports
  • ddtrace/pmaports
  • StacyHarper/pmaports
  • StevenVB/pmaports
  • LucidOne/pmaports
  • iroyally/pmaports
  • Kanedias/pmaports
  • degdagmohamed/pmaports
  • MightyM17/pmaports
  • jack_kekzoz/pmaports
  • angus-g/pmaports
  • RasmusRendal/pmaports
  • frojnd/pmaports
  • k8ie/pmaports
  • Max1Truc/pmaports
  • imzacm/pmaports
  • flacks/pmaports
  • baickainetwork/pmaports
  • samb96/pmaports
  • kryptoz/pmaports
  • fsmnarmosta/pmaports
  • star-tek-mb/pmaports
  • aleksander0m/pmaports
  • Paper_/pmaports
  • Bastindo/pmaports
  • SiddharthManthan/pmaports
  • fproverbio/pmaports
  • docwest/pmaports
  • CalcProgrammer1/pmaports
  • Er2ch/pmaports
  • EspiDev/pmaports
  • Kiciuk/pmaports
  • rdrooij/pmaports
  • Skyliegirl33/pmaports
  • jakko/pmaports
  • h_ro/pmaports
  • Augis154/pmaports
  • dima3.timofeev3.19051997/pmaports
  • alikates/pmaports
  • YSpoof/pmaports
  • PsychoGame/pmaports
  • earboxer/pmaports
  • samuelnorbury2/pmaports
  • al1gat0r/pmaports
  • onny/pmaports
  • postmarketos-ports/pmaports
  • HexagonWin/pmaports
  • HexagonWin/pmaports-1
  • KalWardinX/pmaports
  • yannickulrich/pmaports
  • tvall/pmaports
  • jetomit/pmaports
  • marijan.limov/pmaports
  • pmos-perseus/pmaports
  • efimgirjeu/pmaports
  • nifgraup/pmaports
  • pcworld/pmaports
  • uniformbuffer/pmaports
  • BeastRein/pmaports
  • ojdon/pmaports
  • alxu/pmaports
  • degdagmohamed/sagit-pmaports
  • ranchester/pmaports
  • adamplumb/pmaports
  • nbe1233/pmaports
  • iAboothahir/pmaports
  • pevik/pmaports
  • Absolucy/pmaports
  • mulingLHY/pmaports
  • Latgardi/pmaports
  • afeuerstein/pmaports
  • link2xt/pmaports
  • Firstbober/pmaports
  • Dust417/pmaports
  • Pixead/pmaports
  • chris.heywood/pmaports
  • Robbbbbb/pmaports
  • Anomnomnomous/pmaports
  • sl-tx/pmaports
  • ptrcnull/pmaports
  • belokobylskij/pmaports
  • ungeskriptet/pmaports
  • a_a/pmaports
  • spcook/pmaports
  • maalos/pmaports
  • ruyang/pmaports
  • gauravsuman007/pmaports
  • AriaMoradi/pmaports
  • hexdump0815/pmaports
  • divVerent/pmaports
  • nrenniewaldock/pmaports
  • sm7150-mainline/pmaports
  • tojoRs/pmaports
  • yuvarajvelmurugan/pmaports
  • lagnus/pmaports
  • jeanthom/pmaports
  • flynryan91/pmaports
  • WeirdTreeThing/pmaports
  • spameier/pmaports
  • person4268/pmaports
  • aparcar/pmaports
  • innerspacepilot/pmaports
  • amartinz/pmaports
  • melron_torkin/pmaports
  • hreikin/pmaports
  • vishalbala-nps/pmaports
  • Frost_I7/pmaports
  • dianya/pmaports
  • pexcn/pmaports
  • Linux-4/pmaports
  • akemnade/pmaports
  • monuk7735/pmaports
  • benwolsieffer/pmaports
  • diab0l/pmaports
  • davschneller/pmaports
  • entrider/pmaports
  • jiaxyga/pmaports
  • guelfey/pmaports
  • blacksilver/pmaports
  • MuratovAS/pmaports
  • mikebdp2/pmaports
  • shymega/pmaports
  • WestCope/pmaports
  • mschwalm/pmaports
  • MollySophia/pmaports
  • jianhua000/pmaports
  • MichaelMcDonnell/pmaports
  • mtheunis/pmaports
  • zjuzajyan/pmaports
  • zjuzajyan/pmaports-samsung-hl-3-g
  • dyingwillowtree/pmaports
  • zhxt/pmaports
  • atmitch75/pmaports
  • rom4nik/pmaports
  • wegank/pmaports
  • Radmir_Far/pmaports
  • itsvic.dev/pmaports
  • g0dpup/pmaports
  • cafehaine/pmaports
  • bmasney/pmaports
  • Iourine/pmaports
  • madsmtm/pmaports
  • garethppls/pmaports
  • Kyle_E/pmaports
  • haroldsoixante/pmaportsbis
  • BenTheTechGuy/pmaports
  • LunaOSS/pmaports-xiaomi-sweet
  • doppioandante/pmaports
  • E5PlayJames/pmaports
  • erfan007p/pmaports
  • PrincessDoreena/pmaports
  • DrGit/pmaports
  • thee9632/pmaports
  • gorojack/pmaports
  • AlecJY/pmaports
  • Digi_Man/pmaports
  • kallisti5/pmaports
  • erikd256/pmaports
  • phodina/pmaports
  • peremen/pmaports
  • mugr1x/pmaports
  • shad0wfax/pmaports
  • nicholas.frillman/pmaports-google-veyron-minnie
  • Victor-web-dot/pmaports
  • syboxez/pmaports
  • daviewales/pmaports
  • bjorn31/pmaports
  • pysenx/pmaports
  • GRajin/pmaports
  • treierxyz/pmaports
  • cheadrian/pmaports
  • svenha/pmaports
  • martin.juecker/pmaports
  • kartoffel_/pmaports
  • harryausten/pmaports
  • JoshuaMulliken/pmaports
  • mt6735-mainline/pmaports
  • furkanguzel161/pmaports
  • bademux/pmaports
  • alvaropg/pmaports
  • Roboe/pmaports
  • reocat/pmaports-ido-commit
  • Pestdoktor/pmaports
  • bonfire_/pmaports
  • aftv-pmos/pmaports
  • TheOneWithTheBraid/pmaports
  • map220v/pmaports
  • pmos-oneplus3t/pmaports
  • etn40ff/pmaports
  • youbitchoc/pmaports
  • maxxwall/pmaports
  • m.01001101.01010110/pmaports
  • sleirsgoevy/pmaports
  • Doomsdayrs/pmaports
  • AlleM43/pmaports
  • lucasredelive/pmaports
  • abishek_muthian/pmaports
  • laurenbarry1108/pmaports
  • ChaosLeo07/pmaports
  • chuangzhu/pmaports
  • DevG0BL1N/pmaports
  • notsyncing/pmaports
  • airtower-luna/pmaports
  • bhardy0630/pmaports
  • philhsmith/pmaports
  • maxrd2/pmaports
  • reisl/pmaports
  • loss-and-quick/pmaports
  • affenull2345/pmaports
  • smitsohu/pmaports
  • dartvader316/pmaports
  • lw64/pmaports
  • barni2000/pmaports
  • thesseyren/pmaports
  • Andreiva13/pmaports
  • crashniels/pmaports
  • MarkMuth/pmaports
  • Mas4hmad/pmaports
  • asutoshvariar/pmaports
  • medsouz/pmaports
  • 3stank3399/pmaports
  • sepkov/pmaports
  • dominicm00/pmaports
  • gnumdk/pmaports
  • jmondi/pmaports
  • blueneckodes/pmaports
  • psolyca/pmaports
  • emulti/pmaports
  • Cristian2367/pmaports
  • joehh/pmaports
  • Kabir404/pmaports
  • tsao-chi/pmaports
  • vm03/pmaports
  • piloos/pmaports
  • Alaraajavamma/pmaports
  • blobadoodle/pmaports
  • farrel.dinarta/pmaports
  • adomerle/pmaports
  • wanjidong/pmaports
  • aneeshlingala/pmaports
  • SwShard/pmaports
  • julianwi/pmaports
  • amousa1990/pmaports
  • gohoski/pmaports
  • spazziale/pmaports
  • vixalien/pmaports
  • exkc/pmaports
  • serdeliuk/pmaports
  • ookiineko/pmaports
  • Vitali64/pmaports
  • alpernebbi/pmaports
  • bradl/pmaports
  • brunothedev/pmaports
  • Rikivt/pmaports
  • JDxxxR/pmaports
  • seqfault/pmaports
  • jonthambi/pmaports
  • wfournier/pmaports
  • a520ass/pmaports
  • tpikonen/pmaports
  • vipaoL/pmaports
  • aassaa110012/pmaports
  • FuchtelJockel/pmaports
  • Lored3455/pmaports
  • cleverdata/pmaports
  • JulianGro/pmaports
  • MartinHruza/pmaports
  • nikodunk/pmaports
  • TenTypekMatus/pmaports
  • tomfitzhenry/pmaports
  • Seshpenguin/pmaports
  • pangwalla/pmaports
  • notfound405/pmaports-zhihe
  • msm8953-mainline/pmaports
  • usiab/pmaports
  • modos189/pmaports
  • mantinan/pmaports
  • MoralCode/pmaports
  • Gia90/pmaports
  • DevelLevel/pmaports
  • rmader/pmaports
  • selfisekai/pmaports
  • rene.kliment/pmaports
  • dburkov05/pmaports
  • fancsali/pmaports
  • jane400/pmaports
  • nexplorer-3e/pmaports
  • DvaMishkiLapa/pmaports
  • cristianoftize/pmaports
  • TQMatvey/pmaports
  • edrex/pmaports
  • shtirlic/pmaports
  • dhruv22592/pmaports
  • Mek101/pmaports
  • yourferror/pmaports
  • gtrxAC/pmaports
  • aleiepure/pmaports
  • flafflar/pmaports
  • ijiki16/pmaports
  • faveoled/pmaports
  • lunaaa/pmaports
  • DX37/pmaports
  • Lockl00p/pmaports-samsung-gta-3-xlwifi
  • NullifyDev/j13g-android-kernel
  • nt8r/pmaports
  • a-b-c-1-2-3/pmaports
  • sdm845-ci/pmaports
  • salvatore46001/pmaports
  • pedja11/pmaports
  • ntonnaett/pmaports
  • daviessm/pmaports
  • dahopem/pmaports
  • Krindra/pmaports
  • retr0id/pmaports
  • ororti42/pmaports
  • muskwasis/pmaports
  • kazikcz/pmaports
  • jbrummer/pmaports
  • Akitlove/pmaports
  • neldobxz458/pmaports
  • andreademasi/pmaports
  • nixgoat/pmaports
  • susurrus/pmaports
  • b4k/pmaports
  • hamblingreen/pmaports
  • nerdon7788/pmaports
  • Seres67/pmaports
  • chri7820/pmaports
  • camelCaseNick/pmaports
  • agx1/pmaports
  • ESHARK22/pmaports
  • jerin/pmaports
  • alexmrqt/pmaports
  • martijntje/pmaports
  • oatm221/pmaports
  • ssaikatsaha1996/pmaports
  • podbyte/pmaports
  • josephglynn/pmaports
  • hyjhyper/pmaports
  • JustSoup321/pmaports
  • TronFortyTwo/pmaports
  • technobaboo/pmaports
  • Dark998/pmaports
  • 19atlas/pmaports
  • raihan2000/pmaports
  • spyraks/pmaports
  • DMaxter/pmaports
  • buildingat90degreesC/pmaports
  • echo-pmos/pmaports
  • LaermWirke/pmaports
  • strobo5/pmaports
  • comcloudway/pmaports
  • JustSoup321/pmaports-cros
  • sm8350-mainline/pmaports
  • DragoPayras228/pmaports
  • Augis154/pmaports-old
  • gfgit/pmaports
  • hexaheximal/pmaports
  • Jaymz665/pmaports
  • SomewhatAwake/pmaports
  • markochk/pmaports
  • sajattack/pmaports
  • IverCoder/pmaports
  • rrrrrrmb/pmaports
  • igorko268/pmaports
  • tdfischer/pmaports
  • QC8086/pmaports
  • papiris/pmaports
  • andrisas/pmaports
  • ERROR-404-NULL-NOT-FOUND/pmaports
  • krey_glsux2/pmaports
  • kaechele/pmaports
  • genehand/pmaports
  • beroset/pmaports
  • amessier/pmaports
  • alejandrotapiia/pmaports
  • natsunemimi/pmaports
  • HazardChem/pmaports
  • paricbat/pmaports
  • bzy-080408/pmaports
  • socksinspace/pmaports
  • exynos4-mainline/pmaports
  • xiaomi-poco-x3/pmaports-suryafix
  • CEllenvia/pmaports
  • semis2309/pmaports
  • SeMiiii/pmaports
  • donihalim/pmaports
  • cat3399/pmaports
  • grimsteel/pmaports
  • fossdd/pmaports
  • Statzar/pmaports
  • vognev/pmaports
  • jethrob/pmaports
  • abologna/pmaports
  • Lost-Entrepreneur439/pmaports
  • kubntd/pmaports
  • albert753258/pmaports
  • gavinrogers/pmaports
  • plmcdev/pmaports
  • hiprivsid/pmaports
  • TheOrangeCat/pmaports
  • Drakulix/pmaports
  • danascape/pmaports
  • 1peter10/pmaports
  • yikerman/pmaports
  • MaeIsBad/pmaports
  • mpuscian1/pmaports
  • Eisenbahnfan/pmaports
  • the-SSD/pmaports
  • yjftsjthsd-g/pmaports
  • PD-Kerman/pmaports
  • heki/pmaports
  • wire_witch/pmaports
  • eliassouza/pmaports
  • BrixIT/pmaports
  • Ts0p0sT/pmaports
  • kevinwidjaja21/pmaports
  • xtex-pmos/pmaports
  • superna9999/pmaports
  • zstaseg/pmaports
  • Crftbt/pmaports
  • GusAntoniassi/pmaports
  • maribu/pmaports
  • arya.adithya1998/pmaports
  • armel.guido/pmaports
  • chalkin/pmaports
  • islewind/pmaports
  • omasanori/pmaports
  • thatnerdjosh/pmaports
  • celiffe/pmaports
  • pepijndeos/pmaports
  • zsoltiv/pmaports
  • panpanpanpan/pmaports
  • Raqbit/pmaports
  • yuweiyuan81/pmaports
  • eloydegen/pmaports
  • Fellintr/pmaports
  • RobusTetus/pmaports
  • Smankusors/pmaports
  • user0-tb/pmaports
  • RoseBlume/pmaports
  • ortcric/pmaports
  • dabao1955/pmaports
  • matzipan/pmaports
  • wojtekojtek/pmaports
  • Telanoe/pmaports
777 results
Show changes
Commits on Source (159)
Showing
with 163 additions and 159 deletions
......@@ -2,6 +2,7 @@
# Copyright 2021 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
import sys
import pathlib
# Same dir
import common
......@@ -11,10 +12,13 @@ import add_pmbootstrap_to_import_path
import pmb.parse
import pmb.parse._apkbuild
import pmb.helpers.pmaports
from pmb.core.context import get_context
def build_strict(packages, arch):
common.run_pmbootstrap(["build_init"])
common.run_pmbootstrap(["config", "mirrors.pmaports",
"http://mirror.postmarketos.org/postmarketos/staging/systemd/"])
common.run_pmbootstrap(["--details-to-stdout", "--no-ccache", "build",
"--strict", "--force",
"--arch", arch, ] + list(packages))
......@@ -44,6 +48,7 @@ if __name__ == "__main__":
sys.exit(1)
arch = sys.argv[1]
common.run_pmbootstrap(["config", "systemd", "always"])
# Get and print modified packages
common.add_upstream_git_remote()
packages = common.get_changed_packages()
......@@ -59,15 +64,16 @@ if __name__ == "__main__":
verify_checksums(packages, arch)
sys.exit(0)
# Prepare "args" to use pmbootstrap code
sys.argv = ["pmbootstrap", "chroot"]
# Load context
sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments()
context = get_context()
# Filter out packages that can't be built for given arch
# (Iterate over copy of packages, because we modify it in this loop)
for package in packages.copy():
apkbuild_path = pmb.helpers.pmaports.find(args, package)
apkbuild = pmb.parse._apkbuild.apkbuild(f"{apkbuild_path}/APKBUILD")
apkbuild_path = pmb.helpers.pmaports.find(package)
apkbuild = pmb.parse._apkbuild.apkbuild(pathlib.Path(apkbuild_path, "APKBUILD"))
if not pmb.helpers.pmaports.check_arches(apkbuild["arch"], arch):
print(f"{package}: not enabled for {arch}, skipping")
......
......@@ -3,6 +3,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later
import glob
import pathlib
import tempfile
import sys
import subprocess
......@@ -15,8 +16,9 @@ import add_pmbootstrap_to_import_path # noqa
import pmb.parse
import pmb.parse.version
import pmb.helpers.logging
from pmb.core.context import get_context
def get_package_contents(args, package, revision, check=True):
def get_package_contents(package, revision, check=True):
# Redirect stderr to /dev/null, so git doesn't complain about files not
# existing in upstream branch for new packages
stderr = None
......@@ -37,15 +39,16 @@ def get_package_contents(args, package, revision, check=True):
with tempfile.TemporaryDirectory() as tempdir:
with open(tempdir + "/APKBUILD", "w", encoding="utf-8") as handle:
handle.write(apkbuild_content)
parsed = pmb.parse.apkbuild(tempdir + "/APKBUILD", False, False)
parsed = pmb.parse.apkbuild(pathlib.Path(tempdir, "APKBUILD"),
False, False)
return parsed
def get_package_version(args, package, revision, check=True):
def get_package_version(package, revision, check=True):
""" returns version in the format "{pkgver}-r{pkgrel}", or None if no
matching package is found """
parsed = get_package_contents(args, package, revision, check)
parsed = get_package_contents(package, revision, check)
if parsed is None:
return None
return parsed["pkgver"] + "-r" + parsed["pkgrel"]
......@@ -91,7 +94,7 @@ def exit_with_error_message():
exit(1)
def check_versions(args, packages):
def check_versions(packages):
error = False
# Get relevant commits: compare HEAD against upstream branch or HEAD~1
......@@ -110,8 +113,8 @@ def check_versions(args, packages):
for package in packages:
# Get versions, skip new packages
head = get_package_version(args, package, "HEAD")
upstream = get_package_version(args, package, commit, False)
head = get_package_version(package, "HEAD")
upstream = get_package_version(package, commit, False)
if not upstream:
if head.rpartition('r')[2] != "0":
print(f"- {package}: {head} (HEAD) (new package) [ERROR]")
......@@ -129,8 +132,8 @@ def check_versions(args, packages):
# Additional checks for device packages
if package.startswith('device-'):
head_parsed = get_package_contents(args, package, "HEAD", False)
upstream_parsed = get_package_contents(args, package, commit, False)
head_parsed = get_package_contents(package, "HEAD", False)
upstream_parsed = get_package_contents(package, commit, False)
# checksums did not change
if head_parsed["sha512sums"] == upstream_parsed["sha512sums"]:
......@@ -191,8 +194,12 @@ if __name__ == "__main__":
# Initialize args (so we can use pmbootstrap's APKBUILD parsing)
sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments()
pmb.helpers.logging.init(args)
context = get_context()
# pmb.helpers.logging.init(args)
pmb.helpers.logging.init(context.log, args.verbose, context.details_to_stdout)
# Verify package versions
print("checking changed package versions...")
check_versions(args, packages)
check_versions(packages)
......@@ -60,34 +60,8 @@ def get_upstream_branch():
:returns: branch name, e.g. "v20.05" """
# Prefer gitlab CI target branch name if it's set (i.e. running in gitlab CI)
if target_branch := os.environ.get("CI_MERGE_REQUEST_TARGET_BRANCH_NAME"):
return target_branch
global cache
if "upstream_branch" in cache:
return cache["upstream_branch"]
# Get channel (e.g. "stable") from pmaports.cfg
# https://postmarketos.org/pmaports.cfg
pmaports_dir = get_pmaports_dir()
pmaports_cfg = configparser.ConfigParser()
pmaports_cfg.read(f"{pmaports_dir}/pmaports.cfg")
channel = pmaports_cfg["pmaports"]["channel"]
# Get branch_pmaports (e.g. "v20.05") from channels.cfg
# https://postmarketos.org/channels.cfg
channels_cfg_str = run_git(["show", "upstream/master:channels.cfg"])
channels_cfg = configparser.ConfigParser()
channels_cfg.read_string(channels_cfg_str)
assert channel in channels_cfg, \
f"Channel '{channel}' from pmaports.cfg in your branch is unknown." \
" This appears to be an old branch, consider recreating your change" \
" on top of master."
ret = channels_cfg[channel]["branch_pmaports"]
cache["upstream_branch"] = ret
return ret
# HACK for master_staging_systemd branch
return "master_staging_systemd"
def get_changed_files(removed=True):
......
......@@ -19,16 +19,11 @@ if [ -z "$(command -v pytest)" ]; then
exit 1
fi
# Wrap pmbootstrap to use this repository for --aports
pmaports="$(cd "$(dirname "$0")"/..; pwd -P)"
_pmbootstrap="$(command -v pmbootstrap)"
pmbootstrap() {
"$_pmbootstrap" --aports="$pmaports" "$@"
}
# Make sure that the work folder format is up to date, and that there are no
# mounts from aborted test cases (pmbootstrap#1595)
pmbootstrap work_migrate
pmbootstrap config aports "$pmaports"
pmbootstrap -q shutdown
# Make sure we have a valid device (pmbootstrap#1128)
......
......@@ -2,24 +2,33 @@
# Copyright 2021 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
from pathlib import Path
import add_pmbootstrap_to_import_path
import pmb.parse
from pmb.helpers.args import init as init_args
from pmb.types import PmbArgs
import pmb.config
from pmb.core.pkgrepo import pkgrepo_default_path
import pytest
import sys
import os
@pytest.fixture
@pytest.fixture(scope="session", autouse=True)
def args(request):
# Initialize args
pmaports = os.path.realpath(f"{os.path.dirname(__file__)}/../..")
sys.argv = ["pmbootstrap",
"--aports", pmaports,
"--log", "$WORK/log_testsuite_pmaports.txt"
"chroot"]
args = pmb.parse.arguments()
pmaports = Path(os.path.realpath(f"{os.path.dirname(__file__)}/../.."))
args = PmbArgs()
args.aports = [pmaports]
args.config = pmb.config.defaults["config"]
args.timeout = 900
args.details_to_stdout = False
args.quiet = False
args.verbose = True
args.offline = False
args.action = "init"
args.cross = False
args.log = None
# Initialize logging
pmb.helpers.logging.init(args)
init_args(args)
request.addfinalizer(pmb.helpers.logging.logfd.close)
return args
......@@ -11,6 +11,8 @@ import sys
import add_pmbootstrap_to_import_path
import pmb.parse
import pmb.parse._apkbuild
from pmb.core.pkgrepo import pkgrepo_default_path, pkgrepo_iglob, pkgrepo_relative_path
from pmb.core.arch import Arch
# Cache for codeowners_parse
codeowners_parsed = {}
......@@ -32,11 +34,11 @@ def device_dependency_check(apkbuild, path):
" depends anymore (see pmaports!3478)")
def test_aports_device(args):
def test_aports_device():
"""
Various tests performed on the /device/*/device-* aports.
"""
for path in glob.iglob(args.aports + "/device/*/device-*/APKBUILD"):
for path in pkgrepo_iglob("device/*/device-*/APKBUILD"):
apkbuild = pmb.parse.apkbuild(path)
# Depends: Require "postmarketos-base"
......@@ -54,27 +56,27 @@ def test_aports_device(args):
# Architecture
device = apkbuild["pkgname"][len("device-"):]
deviceinfo = pmb.parse.deviceinfo(args, device)
if "".join(apkbuild["arch"]) != deviceinfo["arch"]:
raise RuntimeError("wrong architecture, please change to arch=\"" +
deviceinfo["arch"] + "\": " + path)
deviceinfo = pmb.parse.deviceinfo(device)
if Arch.from_str("".join(apkbuild["arch"])) != deviceinfo.arch:
raise RuntimeError("wrong architecture, please change to arch=\""
f"{deviceinfo.arch}\": {path}")
if "!archcheck" not in apkbuild["options"]:
raise RuntimeError("!archcheck missing in options= line: " + path)
def test_aports_device_kernel(args):
def test_aports_device_kernel():
"""
Verify the kernels specified in the device packages:
* Kernel must not be in depends when kernels are in subpackages
* Check if only one kernel is defined in depends
"""
aports = pkgrepo_default_path()
# Iterate over device aports
for path in glob.glob(args.aports + "/device/*/device-*/APKBUILD"):
for path in aports.glob("device/*/device-*/APKBUILD"):
# Parse apkbuild and kernels from subpackages
apkbuild = pmb.parse.apkbuild(path)
device = apkbuild["pkgname"][len("device-"):]
kernels_subpackages = pmb.parse._apkbuild.kernels(args, device)
kernels_subpackages = pmb.parse._apkbuild.kernels(device)
# Parse kernels from depends
kernels_depends = []
......@@ -85,29 +87,29 @@ def test_aports_device_kernel(args):
# Kernel in subpackages *and* depends
if kernels_subpackages:
raise RuntimeError("Kernel package '" + depend + "' needs to"
raise RuntimeError(f"Kernel package '{depend}' needs to"
" be removed when using kernel" +
" subpackages: " + path)
f" subpackages: {path}")
# No kernel
if not kernels_depends and not kernels_subpackages:
raise RuntimeError("Device doesn't have a kernel in depends or"
" subpackages: " + path)
f" subpackages: {path}")
# Multiple kernels in depends
if len(kernels_depends) > 1:
raise RuntimeError("Please use kernel subpackages instead of"
" multiple kernels in depends (see"
" <https://postmarketos.org/devicepkg>): " +
path)
f" <https://postmarketos.org/devicepkg>): {path}")
def codeowners_parse(args):
def codeowners_parse():
global codeowners_parsed
pattern_prev = None
aports = pkgrepo_default_path()
with open(f"{args.aports}/CODEOWNERS") as h:
with open(aports / "CODEOWNERS") as h:
for line in h:
line = line.rstrip()
if not line or line.startswith("#"):
......@@ -131,12 +133,13 @@ def codeowners_parse(args):
pattern_prev = pattern
def require_enough_codeowners_entries(args, path, maintainers):
def require_enough_codeowners_entries(path, maintainers):
"""
:param path: full path to an APKBUILD (e.g. /home/user/…/APKBUILD)
:param maintainers: list of one or more maintainers
"""
path = os.path.relpath(path, args.aports)
_, path = pkgrepo_relative_path(path)
nicks = set()
for pattern, pattern_nicks in codeowners_parsed.items():
......@@ -158,36 +161,38 @@ def require_enough_codeowners_entries(args, path, maintainers):
f"{path}: make sure that each maintainer is listed in CODEOWNERS!"
def test_aports_maintained(args):
# @pytest.mark.xfail # Not all aports have been updated yet
def test_aports_maintained():
"""
Ensure that aports in /device/{main,community} have "Maintainer:" and
"Co-Maintainer:" (only required for main) listed in their APKBUILDs. Also
check that at least as many are listed in CODEOWNERS.
"""
codeowners_parse(args)
codeowners_parse()
for path in glob.iglob(f"{args.aports}/device/main/*/APKBUILD"):
if '/firmware-' in path:
for path in pkgrepo_iglob("device/main/*/APKBUILD"):
if 'firmware-' in path.parent.name:
continue
maintainers = pmb.parse._apkbuild.maintainers(path)
assert maintainers and len(maintainers) >= 2, \
f"{path} in main needs at least 1 Maintainer and 1 Co-Maintainer"
require_enough_codeowners_entries(args, path, maintainers)
require_enough_codeowners_entries(path, maintainers)
for path in glob.iglob(f"{args.aports}/device/community/*/APKBUILD"):
if '/firmware-' in path:
for path in pkgrepo_iglob("device/community/*/APKBUILD"):
if 'firmware-' in path.parent.name:
continue
maintainers = pmb.parse._apkbuild.maintainers(path)
assert maintainers, f"{path} in community needs at least 1 Maintainer"
require_enough_codeowners_entries(args, path, maintainers)
require_enough_codeowners_entries(path, maintainers)
def test_aports_unmaintained(args):
def test_aports_unmaintained():
"""
Ensure that aports in /device/unmaintained have an "Unmaintained:" comment
that describes why the aport is unmaintained.
"""
for path in glob.iglob(f"{args.aports}/device/unmaintained/*/APKBUILD"):
for path in pkgrepo_iglob("device/unmaintained/*/APKBUILD"):
unmaintained = pmb.parse._apkbuild.unmaintained(path)
assert unmaintained, f"{path} should have an Unmaintained: " +\
"comment that describes why the package is unmaintained"
......@@ -10,6 +10,7 @@ import sys
import add_pmbootstrap_to_import_path
import pmb.parse
from pmb.core.pkgrepo import pkgrepo_iglob
def deviceinfo_obsolete(info):
......@@ -22,13 +23,13 @@ def deviceinfo_obsolete(info):
"weston_pixman_type",
]
for option in obsolete_options:
if option in info and info[option]:
if getattr(info, option, None):
raise RuntimeError(f"option {option} is obsolete, please rename"
" or remove it (see reasons for removal of at"
" https://postmarketos.org/deviceinfo)")
def test_deviceinfo(args):
def test_deviceinfo():
"""
Parse all deviceinfo files successfully and run checks on the parsed data.
"""
......@@ -37,10 +38,10 @@ def test_deviceinfo(args):
count = 0
pattern = re.compile("^deviceinfo_[a-zA-Z0-9_]*=\".*\"$")
for folder in glob.glob(args.aports + "/device/*/device-*"):
device = folder[len(args.aports):].split("-", 1)[1]
for folder in pkgrepo_iglob("device/*/device-*"):
device = folder.name.split("-", 1)[1]
f = open(folder[len(args.aports):][1:] + "/deviceinfo")
f = open(folder / "deviceinfo")
lines = f.read().split("\n")
f.close()
......@@ -66,12 +67,12 @@ def test_deviceinfo(args):
f" to line instead of above? {line}")
# Successful deviceinfo parsing / obsolete options
info = pmb.parse.deviceinfo(args, device)
info = pmb.parse.deviceinfo(device)
deviceinfo_obsolete(info)
# deviceinfo_name must start with manufacturer
name = info["name"]
manufacturer = info["manufacturer"]
name = info.name
manufacturer = info.manufacturer
if not name.startswith(manufacturer) and \
not name.startswith("Google"):
raise RuntimeError("Please add the manufacturer in front of"
......
......@@ -10,6 +10,7 @@ expected_directories = [
"device/community",
"device/main",
"device/testing",
"extra-repos/systemd",
"main",
"modem",
"non-free",
......
......@@ -7,9 +7,10 @@ import os
import add_pmbootstrap_to_import_path
import pmb.parse
from pmb.core.pkgrepo import pkgrepo_default_path, pkgrepo_iglob
def test_aports_firmware(args):
def test_aports_firmware():
"""
Various tests performed on the /**/firmware-* aports.
"""
......@@ -26,9 +27,9 @@ def test_aports_firmware(args):
"firmware-xiaomi-willow", # Doesn't build, source link is dead (pma#1212)
]
for path in glob.iglob(f"{args.aports}/**/firmware-*/APKBUILD", recursive=True):
for path in pkgrepo_iglob("**/firmware-*/APKBUILD", recursive=True):
apkbuild = pmb.parse.apkbuild(path)
aport_name = os.path.basename(os.path.dirname(path))
aport_name = os.path.basename(path.parent)
if aport_name not in excluded:
if "pmb:cross-native" not in apkbuild["options"]:
......
......@@ -15,9 +15,10 @@ import sys
import add_pmbootstrap_to_import_path
import pmb.config
import pmb.parse
from pmb.core.pkgrepo import pkgrepo_iter_package_dirs
def get_categorized_packages(args):
def get_categorized_packages():
"""
Parse all aports and categorize them.
......@@ -28,7 +29,7 @@ def get_categorized_packages(args):
"""
ret = {}
for path in glob.glob(args.aports + "/*/*/APKBUILD"):
for path in pkgrepo_iter_package_dirs():
# Parse APKBUILD
apkbuild = pmb.parse.apkbuild(path)
url = apkbuild["url"]
......@@ -109,10 +110,10 @@ def check_categories(categories):
return ret
def test_framework_versions(args):
def test_framework_versions():
"""
Make sure that packages of the same framework have the same version.
"""
categories = get_categorized_packages(args)
categories = get_categorized_packages()
if not check_categories(categories):
raise RuntimeError("Framework version check failed!")
......@@ -11,17 +11,21 @@ from pathlib import Path
import add_pmbootstrap_to_import_path
import pmb.parse
from pmb.core.pkgrepo import pkgrepo_iglob, pkgrepo_relative_path
def test_aports_kernel(args):
def test_aports_kernel():
"""
Various tests performed on the /**/linux-* aports.
"""
for path in glob.iglob(f"{args.aports}/**/linux-*/APKBUILD", recursive=True):
for path in pkgrepo_iglob("**/linux-*/APKBUILD", recursive=True):
apkbuild = pmb.parse.apkbuild(path)
aport_name = os.path.basename(os.path.dirname(path))
if aport_name == "linux-pam":
continue # This package isn't a linux kernel!
if "pmb:cross-native" not in apkbuild["options"]:
raise RuntimeError(f"{aport_name}: \"pmb:cross-native\" missing in"
" options= line")
......@@ -37,14 +41,15 @@ def test_aports_kernel(args):
" automatically.")
# check some options only for main and community devices
for dir in ["main", "device/main", "device/community"]:
if path.startswith(f"{args.aports}/{dir}"):
_, relpath = pkgrepo_relative_path(path)
for part in ["main", "community"]:
if part in relpath.parts:
if "pmb:kconfigcheck-community" not in apkbuild["options"]:
raise RuntimeError(f"{aport_name}: \"pmb:kconfigcheck-community\" missing in"
" options= line, required for all community/main devices.")
# check for postmarketos-installkernel in makedepends when installing kernel with make
if bool(re.search("make z?install", Path(path).read_text(encoding="utf-8"))):
if bool(re.search("make z?install", path.read_text(encoding="utf-8"))):
if "postmarketos-installkernel" not in apkbuild["makedepends"]:
raise RuntimeError(f"{aport_name}: \"postmarketos-installkernel\" missing in"
" makedepends, required when using make install/zinstall.")
......@@ -10,6 +10,7 @@ import sys
import add_pmbootstrap_to_import_path
import pmb.parse
import pmb.parse._apkbuild
from pmb.core.pkgrepo import pkgrepo_iter_package_dirs, pkgrepo_relative_path
def apkbuild_check_provides(path, apkbuild, version, pkgname, subpkgname=None):
......@@ -65,13 +66,14 @@ def apkbuild_check_provides(path, apkbuild, version, pkgname, subpkgname=None):
return ret
def test_provides(args):
def test_provides():
errors = []
for path in glob.iglob(f"{args.aports}/**/APKBUILD", recursive=True):
for path in pkgrepo_iter_package_dirs():
path = path / "APKBUILD"
apkbuild = pmb.parse.apkbuild(path)
pkgname = apkbuild["pkgname"]
version = f"{apkbuild['pkgver']}-r{apkbuild['pkgrel']}"
path_rel = os.path.relpath(path, args.aports)
_, path_rel = pkgrepo_relative_path(path)
errors += apkbuild_check_provides(path_rel, apkbuild, version, pkgname)
for subpkg, subpkg_data in apkbuild["subpackages"].items():
......
......@@ -14,9 +14,10 @@ import pmb.parse
import pmb.parse._apkbuild
import pmb.parse.apkindex
import pmb.helpers.repo
from pmb.core.pkgrepo import pkgrepo_iter_package_dirs, pkgrepo_relative_path
def parse_source_from_checksums(args, apkbuild_path):
def parse_source_from_checksums(apkbuild_path):
"""
Read the APKBUILD file and parse source files from the checksums at the
bottom. This has always the same format, even if $source is built with hard
......@@ -64,17 +65,20 @@ def parse_source_from_checksums(args, apkbuild_path):
return ret
def test_aports_unreferenced_files(args):
def test_aports_unreferenced_files():
"""
Raise an error if an unreferenced file is found
"""
for apkbuild_path in glob.iglob(args.aports + "/**/APKBUILD", recursive=True):
for apkbuild_path in pkgrepo_iter_package_dirs():
# pmbootstrap parser has some issues with complicated APKBUILDs, skip those.
if apkbuild_path.startswith(args.aports + "/cross/"):
_, relpath = pkgrepo_relative_path(apkbuild_path)
if relpath.parts[0] == "cross":
continue
apkbuild_path = apkbuild_path / "APKBUILD"
apkbuild = pmb.parse.apkbuild(apkbuild_path)
sources_chk = parse_source_from_checksums(args, apkbuild_path)
sources_chk = parse_source_from_checksums(apkbuild_path)
# Collect files from subpackages
subpackage_installs = []
......@@ -105,7 +109,7 @@ def test_aports_unreferenced_files(args):
raise RuntimeError(f"{apkbuild_path}: found unreferenced file: {rel_file_path}")
def test_distfiles_conflict(args):
def test_distfiles_conflict():
"""
Make sure that each filename mentioned in any source= of any APKBUILD
always has the same checksum. This is important because apk caches
......@@ -115,10 +119,11 @@ def test_distfiles_conflict(args):
with a checksum error.
"""
source_all = {}
for apkbuild_path in glob.iglob(f"{args.aports}/**/APKBUILD", recursive=True):
source = parse_source_from_checksums(args, apkbuild_path)
for apkbuild_path in pkgrepo_iter_package_dirs():
apkbuild_path = apkbuild_path / "APKBUILD"
source = parse_source_from_checksums(apkbuild_path)
dir_path = os.path.dirname(apkbuild_path)
apkbuild_rel = os.path.relpath(apkbuild_path, args.aports)
_, apkbuild_rel = pkgrepo_relative_path(apkbuild_path)
for filename, checksum in source.items():
# Files bundled with the APKBUILD don't get copied to the distfiles
# cache, so not relevant for this check. Use glob.glob here and not
......
......@@ -9,25 +9,26 @@ import os
import add_pmbootstrap_to_import_path
import pmb.parse
from pmb.core.pkgrepo import pkgrepo_iglob
def test_aports_ui(args):
def test_aports_ui():
"""
Raise an error if package in _pmb_recommends is not found
"""
pmaports_cfg = pmb.config.pmaports.read_config(args)
pmaports_cfg = pmb.config.pmaports.read_config()
for arch in pmaports_cfg["supported_arches"].split(","):
for path in glob.iglob(args.aports + "/main/postmarketos-ui-*/APKBUILD"):
for path in pkgrepo_iglob("main/postmarketos-ui-*/APKBUILD"):
apkbuild = pmb.parse.apkbuild(path)
# Skip if arch isn't enabled
if not pmb.helpers.package.check_arch(args, apkbuild["pkgname"], arch, False):
if not pmb.helpers.package.check_arch(apkbuild["pkgname"], arch, False):
continue
for package in apkbuild["_pmb_recommends"]:
depend = pmb.helpers.package.get(args, package,
depend = pmb.helpers.package.get(package,
arch, must_exist=False)
if depend is None or not pmb.helpers.package.check_arch(args, package, arch):
if depend is None or not pmb.helpers.package.check_arch(package, arch):
raise RuntimeError(f"{path}: package '{package}' from"
f" _pmb_recommends not found for arch '{arch}'")
......@@ -35,8 +36,8 @@ def test_aports_ui(args):
if f"{apkbuild['pkgname']}-extras" in apkbuild["subpackages"]:
apkbuild = apkbuild["subpackages"][f"{apkbuild['pkgname']}-extras"]
for package in apkbuild["_pmb_recommends"]:
depend = pmb.helpers.package.get(args, package,
depend = pmb.helpers.package.get(package,
arch, must_exist=False)
if depend is None or not pmb.helpers.package.check_arch(args, package, arch):
if depend is None or not pmb.helpers.package.check_arch(package, arch):
raise RuntimeError(f"{path}: package '{package}' from _pmb_recommends "
f"of -extras subpackage is not found for arch '{arch}'")
......@@ -12,3 +12,8 @@ indent_style = tab
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
# Forked from Alpine
[extra-repos/systemd/networkmanager/networkmanager.rules]
indent_style = space
indent_size = 4
......@@ -10,6 +10,8 @@ stages:
- lint
- build
- autoupdate
variables:
PMBOOTSTRAP_TAG: "master"
# This defines the rules for when a pipeline should run.
workflow:
......@@ -125,8 +127,6 @@ mr-settings:
# build changed aports
.build:
stage: build
tags:
- saas-linux-large-amd64
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_REF_PROTECTED == "false"
before_script:
......@@ -145,15 +145,8 @@ build-x86_64:
script:
- .ci/build-x86_64.sh
build-x86:
extends: .build
script:
- .ci/build-x86.sh
build-aarch64:
extends: .build
tags:
- saas-linux-large-arm64
script:
- .ci/build-aarch64.sh
......@@ -162,21 +155,8 @@ build-armv7:
script:
- .ci/build-armv7.sh
build-armhf:
extends: .build
script:
- .ci/build-armhf.sh
build-riscv64:
extends: .build
script:
- .ci/build-riscv64.sh
auto-update:
stage: autoupdate
# We build packages before merging too
tags:
- saas-linux-large-amd64
rules:
# This variable is set in the scheduled pipeline configuration. It should be a space separated list of
# package names to update.
......
......@@ -2,7 +2,7 @@
# Co-Maintainer: Oliver Smith <ollieparanoid@postmarketos.org>
pkgname=device-generic-x86_64
pkgdesc="Generic x86_64 system, with EFI"
pkgver=15
pkgver=16
pkgrel=0
url="https://postmarketos.org"
license="MIT"
......@@ -17,10 +17,11 @@ makedepends="devicepkg-dev"
source="
deviceinfo
modules-initfs
30-gpu-firmware.files
30-gpu-i915-firmware.files
"
install="$pkgname.post-install $pkgname.post-upgrade"
subpackages="
$pkgname-intel
$pkgname-kernel-edge:kernel_edge
$pkgname-kernel-lts:kernel_lts
"
......@@ -41,9 +42,14 @@ build() {
package() {
devicepkg_package $startdir $pkgname
}
intel() {
pkgdesc="Intel-specific configuration"
install_if="$pkgname=$pkgver-r$pkgrel oem-intel"
install -Dm644 "$srcdir"/30-gpu-firmware.files \
-t "$pkgdir"/usr/share/mkinitfs/files/
install -Dm644 "$srcdir"/30-gpu-i915-firmware.files \
-t "$subpkgdir"/usr/share/mkinitfs/files/
}
kernel_edge() {
......@@ -65,5 +71,5 @@ kernel_lts() {
sha512sums="
e9dfcd70ccfb9a0fdaa0cdc52faf3be96d6de8af8c60a758bb703c515b0648cec4552e0eaf56e5168b0004cd3fc4b28118abb05dad2c581d3579a2e9134862cb deviceinfo
e464ef0ad4a4c34d2d53f69c4612b612ea878a77c9efdef69b0f842edf701036c8218809fd63aac286d6a08ae07f39e568199fc3e38d145e716c1723e7215019 modules-initfs
9599a10679a43929e4ed2ea22269a0716219163817574d48db4dc1cb21a0fcf17ea54d77d5fd8efd034905c421ecb3eaa600a72927d683983ce48d1159329881 30-gpu-firmware.files
9599a10679a43929e4ed2ea22269a0716219163817574d48db4dc1cb21a0fcf17ea54d77d5fd8efd034905c421ecb3eaa600a72927d683983ce48d1159329881 30-gpu-i915-firmware.files
"
......@@ -4,7 +4,7 @@
pkgname=device-oneplus-enchilada
pkgdesc="OnePlus 6"
pkgver=14
pkgrel=1
pkgrel=2
url="https://postmarketos.org"
license="MIT"
arch="aarch64"
......@@ -56,7 +56,7 @@ nonfree_firmware() {
}
nonfree_firmware_openrc() {
install_if="$pkgname-nonfree-firmware=$pkgver-r$pkgrel"
install_if="$pkgname-nonfree-firmware=$pkgver-r$pkgrel openrc"
replaces="hexagonrpcd-openrc"
install="$subpkgname.post-install $subpkgname.post-upgrade"
......
# Maintainer: Jenneron <jenneron@protonmail.com>
pkgname=linux-google-veyron
pkgver=6.1.39
pkgrel=3
pkgrel=4
pkgdesc="Mainline kernel for Google Veyron devices"
arch="armv7"
_carch="arm"
......@@ -68,7 +68,7 @@ package() {
sha512sums="
20d468ae89b57dda82d7c7b814c3d8b1b510e1623775b09a8a0b0a8a0431461e0a1d2df2bfa01f3102932c8eef91405546898b50ec3e6f30015098bb39722b41 linux-6.1.39.tar.xz
c2bc85928ce2025a2928af1e36d67a5ad66c6786e47e740dec806baf814adc8dcef76c4c4536e825bd09e56876eeb83373556d261c1d260476fc41e1c6d14d7b config-google-veyron.armv7
3251546c093d41c3cd832d864a5f24b0de6da1e8ab2856bc7b168d450c450d66c82a141c0c4550ed124a3cf59745bdaef28eab6cef220e3fa8295889d222e1d3 config-google-veyron.armv7
2912c675c1e07f7e91e2edcaa82738643907ed46614e4b871565930ff4ffece468d47db7905c2c081f936c020ea78db4a9d9f33b76c110125a0e68a1bd57f9fd veyron.better_clock_selection_logic_and_dts_rate_list.patch
b16da0e0b1da9f074a773300e954aa5e0da6c2113e20c0b594a7a4875e9addb10efcf5be694467fb00cd8d7c2e3cc83e6d7aac618047775dc0bb354245cf7c35 veyron.dts_allow_dedicating_npll_to_vop.patch
b7bda162526abdb61c0223f1aac31893526d3d1d21d79ebd3e707be8d9b5dc464f6b4fa20b74444c44fda987352728433913f6f50b9b860c2621d11ae2306e1b veyron.dts_do_dedicate_npll_to_vop.patch
......