Skip to content

Instantly share code, notes, and snippets.

@michaelsauter
michaelsauter / BasePresenter.php
Last active February 6, 2024 12:56
Simple presenter pattern for Symfony2/Twig. Really useful to get some view logic out of the models and views into its own separate space.
<?php
namespace Acme\DemoBundle\Presenter;
class BasePresenter
{
protected $subject;
public function __construct($subject)
{
@michaelsauter
michaelsauter / ods-pipeline-introduction.md
Last active March 9, 2021 14:46
ods-pipeline-introduction.md
@michaelsauter
michaelsauter / gist:297c0a67ba277b9c508f933ef9f70cdf
Last active February 16, 2021 15:21
Find and remove old Git branches
# Update local repo
git fetch origin --prune
# Merged branches at least 2 months old
for branch in `git branch -r --merged | grep -v HEAD`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1` \\t$branch; done | grep "months" | awk '{print $(NF)}' | sed -e "s/^origin\///" | xargs git push origin --delete --dry-run
# All branches at least a year old
for branch in `git branch -r | grep -v HEAD`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1` \\t$branch; done | grep "1 year" | awk '{print $(NF)}' | sed -e "s/^origin\///" | xargs git push origin --delete --dry-run
@michaelsauter
michaelsauter / tekton-pipelines-controller.log
Created November 16, 2020 07:25
tekton-pipelines-controller.log
{"level":"info","logger":"tekton","caller":"controller/controller.go:436","msg":"Reconcile failed. Time taken: 10.692465ms","knative.dev/traceid":"686039a6-50ca-4c45-888d-c2d5574bb1d1","knative.dev/key":"unitt-dev/build-and-deploy-run-6xqb9"}
{"level":"info","logger":"tekton.event-broadcaster","caller":"record/event.go:274","msg":"Event(v1.ObjectReference{Kind:\"PipelineRun\", Namespace:\"unitt-dev\", Name:\"build-and-deploy-run-6xqb9\", UID:\"f9649a7f-4121-49ec-ae62-e686564cf75b\", APIVersion:\"tekton.dev/v1beta1\", ResourceVersion:\"297003666\", FieldPath:\"\"}): type: 'Warning' reason: 'InternalError' 1 error occurred:\n\t* failed to delete StatefulSet affinity-assistant-402a8246ef: statefulsets.apps \"affinity-assistant-402a8246ef\" not found\n\n"}
{"level":"warn","logger":"tekton","caller":"artifacts/artifacts_storage.go:201","msg":"the configmap has no data","knative.dev/traceid":"890f787f-b29f-46e3-960f-436bac4599dc","knative.dev/key":"unitt-dev/build-and-deploy-run-8sxp8"}
{"level":"error","logger":"t
@michaelsauter
michaelsauter / outline.md
Last active July 23, 2020 15:32
ods3-features

✂️ Get rid of that boilerplate!

From:

def final projectId = 'foo'
def final componentId = 'bar'
def final credentialsId = "${projectId}-cd-cd-user-with-password"
def dockerRegistry
node {
  dockerRegistry = env.DOCKER_REGISTRY
}
@michaelsauter
michaelsauter / Jenkinsfile.example
Last active July 6, 2020 09:12
Jenkinsfile.example
odsComponentPipeline(
imageStreamTag: 'ods/jenkins-agent-base:3.x'
) {
odsComponentStageImportOpenShiftImageOrElse(context) {
stage('Build') {
sh './gradlew build'
}
odsComponentStageBuildOpenShiftImage(context)
}
import org.ods.service.ServiceRegistry
import org.ods.util.GitUtil
import org.ods.util.Project
def runOnAgentPod(Project project, boolean condition, Closure block) {
if (condition) {
def git = ServiceRegistry.instance.get(GitUtil)
dir(env.WORKSPACE) {
stash(name: 'wholeWorkspace', includes: '**/*,**/.git', useDefaultExcludes: false)
}
@michaelsauter
michaelsauter / ODS3.md
Last active January 16, 2020 08:39
ODS 3.0

Work Packages for OpenDevStack 3.0

Release timeline: May 2020. Theme: Quality

Shared Library Testing

Owner(s): ? / Size: M / Benefit: Reliable pipelines, more confidence in changes / Ticket(s): #149, #146

Write automated tests for the shared library. Could be a mixed of tests with mocks and E2E tests. Run e.g. in Travis or Github Actions.

Project Provisioning Testing

Interview Task

Objective

As a Farmera developer, synchronize temperature data reliably from an external vendor, myfarm.io, with Farmera. What kind of concepts / entities do you need to implement in our service? How will you do the interaction with myfarm.io? If you need more information about the API, please ask.

API Documentation myfarm.io

Example request

curl 'https://api.myfarm.io/devices/123/temperature?start=2019-01-06T00%3A00%3A00Z&amp;end=2019-01-09T00%3A00%3A00Z&amp;groupBy=FIFTEEN_MINUTES' -i -u 'user:secret' -X GET
VAGRANTFILE_API_VERSION = "2"
Vagrant.require_version ">= 1.6.3"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define "boot2docker"
config.vm.box = "yungsang/boot2docker"
config.vm.box_check_update = false