OctoAwesome / octoawesome

This is the code repository for the OctoAwesome project - a collection of daily, 20 minute long game development tutorial videos, iterating over the same piece of code
http://octoawesome.net/
MIT License
108 stars 31 forks source link

Continuous Integration #175

Open reicheltp opened 7 years ago

reicheltp commented 7 years ago

Hi zusammen,

Ich hatte das Thema vor gut einem halben Jahr mal angestoßen, dass es wahrscheinlich recht praktisch wäre, eine CI zu haben, um eine gewisse Code Quality zu gewährleisten. Da ja immer mehr auch außerhalb der Live Sessions passiert und die Code base weiter wächst, ist eine CI um so wichtiger.

Frage: Ist das Thema für euch interessant? Wenn ja würde ich mich die Tage mal ran setzen und schauen, was angepasst werden muss.

Folgende Punkte würden dazu gehören:

@tomwendel Kann sowas dann einfach per PR eingehen, oder willst du das in einer Session dann näher beleuchten?

ManuelHu commented 7 years ago

Könnte man draüber auch eine Art "Nightly build" nach jedem Commit erstellen und zum Download anbieten.

Vengarioth commented 7 years ago

Irks, ja darum wollte ich mich mal kümmern, hab das total vergessen :'D

reicheltp commented 7 years ago

Ich hab das ganze jetzt auf dem Branch feature/ci begonnen und bin schon in das erste Problem gelaufen auf AppVeyor:

 Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
     at OpenTK.Graphics.OpenGL4.GL.GenerateMipmap(GenerateMipmapTarget target)
     at engenious.Content.Pipeline.TextureContent.<>c__DisplayClass3_0.<createTexture>b__0()
     at engenious.ThreadingHelper.BlockOnUIThread(Action action, Boolean needsUI, Object additional)
     at engenious.Content.Pipeline.TextureContent.createTexture(Boolean generateMipMaps, Int32 mipMapCount, IntPtr inputData, Int32 width, Int32 height, TextureContentFormat inputFormat, TextureContentFormat outputFormat)
     at engenious.Content.Pipeline.TextureContent..ctor(Boolean generateMipMaps, Int32 mipMapCount, IntPtr inputData, Int32 width, Int32 height, TextureContentFormat inputFormat, TextureContentFormat outputFormat)
     at engenious.Content.Pipeline.FontProcessor.Process(FontContent input, String filename, ContentProcessorContext context)
     at engenious.Content.Pipeline.ContentProcessor`3.engenious.Content.Pipeline.IContentProcessor.Process(Object input, String filename, ContentProcessorContext context)
     at ContentTool.Builder.ContentBuilder.buildFile(ContentFile contentFile, ContentImporterContext importerContext, ContentProcessorContext processorContext)
     at ContentTool.Builder.ContentBuilder.buildDir(ContentFolder folder, ContentImporterContext importerContext, ContentProcessorContext processorContext)
     at ContentTool.Builder.ContentBuilder.<Build>b__43_0()
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Threading.ThreadHelper.ThreadStart()

Lokal läuft es und kann mit ./build.ps1 ausprobiert werden. Sieht für mich nach einem Problem mit der engenious Pipeline aus. @jvbsl Kannst du da helfen?

Ganzen log gibt's hier: https://ci.appveyor.com/project/reicheltp/octoawesome/build/3

reicheltp commented 7 years ago

@ManuelHu Ja, ohne Probleme sogar. Ein Continuous Deployment würde ich aber im 2. Schritt in Angriff nehmen, da erst der distributions weg geklärt werden muss. (Installer, Auto Updater, plain zip, oder ...)

jvbsl commented 7 years ago

das einzige, das ich mir im Moment vorstellen kann, ist dass wir kein OGL4 dort haben, ist das Möglich? das generieren der MipMaps könnte man auch später selbst übernehmen für bessere Qualität, jedoch müsste ich dafür die Bitmap Skalierung implementieren und wär natürlich auch auf der CPU

reicheltp commented 7 years ago

So Fehler gefunden: AppVeyor nutzt Microsoft Azure VMs, wo natürlich kein Hardware beschleunigtes OpenGL verfügbar ist. Lösung ist, die Mesa lib zu nutzen, da diese das OpenGL interface auf Software basis anbietet.

@jvbsl Sollten wir die mesa libs mit der engenious pipeline ausliefern, oder nur auf der CI laden?

Update 1 Selbes Problem auch auf den Travis CI VMs

TheBlubb14 commented 2 years ago

CI durch #290 implementiert 🥳