') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Extract prek hooks for FAB provider by jscheffl · Pull Request #57181 · apache/airflow · GitHub
Skip to content

Extract prek hooks for FAB provider - #57181

Merged
vincbeck merged 4 commits into
apache:mainfrom
jscheffl:feature/extract-pre-commit-for-fab
Oct 24, 2025
Merged

Extract prek hooks for FAB provider#57181
vincbeck merged 4 commits into
apache:mainfrom
jscheffl:feature/extract-pre-commit-for-fab

Conversation

@jscheffl

Copy link
Copy Markdown
Contributor

As prek is supporting monorepo now and go SDK was the front-runner, fab provider is now the next piece that with this PR is proposed to be split-out from global pre-commit hook list into the provider space.

@kaxilkaxil left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You have verified that this works (i.e. prek hooks run) without bugs, yea?

@kaxil

Copy link
Copy Markdown
Member

You have verified that this works (i.e. prek hooks run) without bugs, yea?

I assume we don't need to do anything different in CI to run it there too?

@jscheffl

Copy link
Copy Markdown
ContributorAuthor

You have verified that this works (i.e. prek hooks run) without bugs, yea?

I assume we don't need to do anything different in CI to run it there too?

Also my assumption - this is why we have a CI? All static checks are executed there.

@kaxilkaxil added the full tests needed We need to run full set of tests for this PR to merge label Oct 23, 2025
@kaxil

Copy link
Copy Markdown
Member

I assume we don't need to do anything different in CI to run it there too?

Also my assumption - this is why we have a CI? All static checks are executed there.

As long as it runs :D

@jscheffl

Copy link
Copy Markdown
ContributorAuthor

I assume we don't need to do anything different in CI to run it there too?

Also my assumption - this is why we have a CI? All static checks are executed there.

As long as it runs :D

This is how it runs in https://github.com/apache/airflow/actions/runs/18763029405/job/53533026350?pr=57181:
image

Comment threadproviders/fab/.pre-commit-config.yaml Outdated
Comment threadproviders/fab/.pre-commit-config.yaml Outdated
@kaxil

Copy link
Copy Markdown
Member

Nice yeah that looks great

Comment threadproviders/fab/.pre-commit-config.yaml Outdated
@jscheffl
jschefflforce-pushed the feature/extract-pre-commit-for-fab branch from 26c08de to ef74f56CompareOctober 24, 2025 05:51
@vincbeck
vincbeck merged commit 267882a into apache:mainOct 24, 2025
112 checks passed
@potiuk

Copy link
Copy Markdown
Member

Yep. Nothing should be needed - prek auto-discovers all pre-commit config files.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dev-toolsarea:providersfull tests neededWe need to run full set of tests for this PR to mergeprovider:fab

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@jscheffl@kaxil@potiuk@vincbeck