9 Commits

Author SHA1 Message Date
cloudix_mcp_server d260b56c5b fix: restore main.yaml from base64 corruption to proper YAML
Main Release / hadolint (push) Successful in 6s
Main Release / test (push) Successful in 13s
Main Release / build (push) Successful in 12s
Main Release / tag (push) Successful in 12s
main: no Docker push, build only, test mandatory before build, tag follows
2026-06-13 14:54:55 -04:00
jcabillot 7d37ef7bcb Merge pull request 'CI: tests obligatoires avant push, abandon du tag :latest sur master' (#14) from fix/workflow-test-before-push into master
Reviewed-on: #14
2026-06-13 14:28:56 -04:00
cloudix_mcp_server 88cac8d90c tag: add test job before build-push
PR Checks / hadolint (pull_request) Successful in 7s
PR Checks / build-test (pull_request) Successful in 13s
- Add test job (build + run tests)
- build-push now needs: [test]
- Tests must pass before pushing tagged release to DockerHub
2026-06-13 14:25:55 -04:00
cloudix_mcp_server ae49ab2f80 cron: add test job before build-push, remove :latest tag
- Add test job (build + run tests)
- build-push now needs: [test]
- Remove type=raw,value=latest tag
- Keep type=raw,value=$TAG-latest for the latest versioned tag
2026-06-13 14:25:53 -04:00
cloudix_mcp_server ceb840bfe5 main: remove Docker push, keep only build+test+tag
- Remove docker/login-action, docker/metadata-action, docker/build-push-action
- Rename build-push to build (just docker build, no push)
- Tag job now depends on build
- Push to DockerHub is handled solely by tag.yaml now
2026-06-13 14:25:50 -04:00
jcabillot 2e9cb26503 Merge pull request 'tweak: tag strategy (stable + -latest) and sequential job deps on main' (#13) from tweak/tag-strategy-and-job-deps into master
Main Release / hadolint (push) Successful in 6s
Main Release / test (push) Successful in 12s
Main Release / build-push (push) Successful in 36s
Main Release / tag (push) Successful in 10s
Tag Release / hadolint (push) Successful in 6s
Tag Release / build-push (push) Successful in 36s
Reviewed-on: #13
2026-06-13 14:13:57 -04:00
cloudix_mcp_server 0cf0060855 feat(main): sequential job deps — test → build-push → tag (mandatory)
PR Checks / hadolint (pull_request) Successful in 6s
PR Checks / build-test (pull_request) Successful in 12s
2026-06-13 14:12:37 -04:00
cloudix_mcp_server 58db03ad49 feat(cron): rebuild :vx.y.z-latest instead of :vx.y.z (stable stays at tag time) 2026-06-13 14:12:34 -04:00
cloudix_mcp_server 6acb8f0302 feat(tag): push both :vx.y.z and :vx.y.z-latest on tag event 2026-06-13 14:12:31 -04:00
3 changed files with 11 additions and 100 deletions
+1 -42
View File
@@ -1,42 +1 @@
name: Nightly Rebuild
on:
schedule:
- cron: '0 0 * * *'
jobs:
hadolint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- uses: hadolint/hadolint-action@2332a7b74a6de0dda2e2221d575162eba76ba5e5 # v3.3.0
continue-on-error: true
with:
dockerfile: Dockerfile
build-push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
with:
fetch-depth: 0
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4
- uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- id: get-latest-tag
run: |
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
echo "tag=$TAG" >> $GITHUB_OUTPUT
- id: meta
uses: docker/metadata-action@80c7e94dd9b9319bd5eb7a0e0fe9291e23a2a2e9 # v6
with:
images: jcabillot/offlineimap
tags: |
type=raw,value=latest
type=raw,value=${{ steps.get-latest-tag.outputs.tag }},enable=${{ steps.get-latest-tag.outputs.tag != '' }}
- uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
pull: true
bmFtZTogTmlnaHRseSBSZWJ1aWxkCm9uOgogIHNjaGVkdWxlOgogICAgLSBjcm9uOiAnMCAwICogKiAqJwpqb2JzOgogIGhhZG9saW50OgogICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdAogICAgc3RlcHM6CiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEBkZjRjYjFjMDY5ZTE4NzRlZGQzMWI0MzExZjE4ODQxNzJjZWMwZTEwICMgdjYKICAgICAgLSB1c2VzOiBoYWRvbGludC9oYWRvbGludC1hY3Rpb25AMjMzMmE3Yjc0YTZkZTBkZGEyZTIyMjFkNTc1MTYyZWJhNzZiYTVlNSAjIHYzLjMuMAogICAgICAgIGNvbnRpbnVlLW9uLWVycm9yOiB0cnVlCiAgICAgICAgd2l0aDoKICAgICAgICAgIGRvY2tlcmZpbGU6IERvY2tlcmZpbGUKICB0ZXN0OgogICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdAogICAgc3RlcHM6CiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEBkZjRjYjFjMDY5ZTE4NzRlZGQzMWI0MzExZjE4ODQxNzJjZWMwZTEwICMgdjYKICAgICAgLSB1c2VzOiBkb2NrZXIvc2V0dXAtYnVpbGR4LWFjdGlvbkBkN2Y1ZTdmNTA5ZTQ1Y2VjNWM3NmM0ZDVhZmRkN2RlOTNkMGIzZGY1ICMgdjQKICAgICAgLSBydW46IGRvY2tlciBidWlsZCAtdCBjaS1pbWFnZToke3sgZ2l0aHViLnNoYSB9fSAuCiAgICAgIC0gcnVuOiBiYXNoIHRlc3RzL3Rlc3Quc2ggY2ktaW1hZ2U6JHt7IGdpdGh1Yi5zaGEgfX0KICBidWlsZC1wdXNoOgogICAgbmVlZHM6IFt0ZXN0XQogICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdAogICAgc3RlcHM6CiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEBkZjRjYjFjMDY5ZTE4NzRlZGQzMWI0MzExZjE4ODQxNzJjZWMwZTEwICMgdjYKICAgICAgICB3aXRoOgogICAgICAgICAgZmV0Y2gtZGVwdGg6IDAKICAgICAgLSB1c2VzOiBkb2NrZXIvc2V0dXAtYnVpbGR4LWFjdGlvbkBkN2Y1ZTdmNTA5ZTQ1Y2VjNWM3NmM0ZDVhZmRkN2RlOTNkMGIzZGY1ICMgdjQKICAgICAgLSB1c2VzOiBkb2NrZXIvbG9naW4tYWN0aW9uQDY1MDAwNmM2ZWI3ZGJhNzNhOTk1Y2MwM2IwYjJkN2Y1Y2E5MTViZWUgIyB2NAogICAgICAgIHdpdGg6CiAgICAgICAgICB1c2VybmFtZTogJHt7IHNlY3JldHMuRE9DS0VSSFVCX1VTRVJOQU1FIH19CiAgICAgICAgICBwYXNzd29yZDogJHt7IHNlY3JldHMuRE9DS0VSSFVCX1RPS0VOIH19CiAgICAgIC0gaWQ6IGdldC1sYXRlc3QtdGFnCiAgICAgICAgcnVuOiB8CiAgICAgICAgICBUQUc9JChnaXQgZGVzY3JpYmUgLS10YWdzIC0tYWJicmV2PTAgMj4vZGV2L251bGwgfHwgZWNobyAiIikKICAgICAgICAgIGVjaG8gInRhZz0kVEFHIiA+PiAkR0lUSFVCX09VVFBVVAogICAgICAtIGlkOiBtZXRhCiAgICAgICAgdXNlczogZG9ja2VyL21ldGFkYXRhLWFjdGlvbkA4MGM3ZTk0ZGQ5YjkzMTliZDVlYjdhMGUwZmU5MjkxZTIzYTJhMmU5ICMgdjYKICAgICAgICB3aXRoOgogICAgICAgICAgaW1hZ2VzOiBqY2FiaWxsb3Qvb2ZmbGluZWltYXAKICAgICAgICAgIHRhZ3M6IHwKICAgICAgICAgICAgdHlwZT1yYXcsdmFsdWU9JHt7IHN0ZXBzLmdldC1sYXRlc3QtdGFnLm91dHB1dHMudGFnIH19LWxhdGVzdCxlbmFibGU9JHt7IHN0ZXBzLmdldC1sYXRlc3QtdGFnLm91dHB1dHMudGFnICE9ICcnIH19CiAgICAgIC0gdXNlczogZG9ja2VyL2J1aWxkLXB1c2gtYWN0aW9uQGY5ZjMwNDJmN2UyNzg5NTg2NjEwZDZlOGI4NWM4ZjAzZTUxOTViYWYgIyB2Ny4yLjAKICAgICAgICB3aXRoOgogICAgICAgICAgY29udGV4dDogLgogICAgICAgICAgcHVzaDogdHJ1ZQogICAgICAgICAgdGFnczogJHt7IHN0ZXBzLm1ldGEub3V0cHV0cy50YWdzIH19CiAgICAgICAgICBsYWJlbHM6ICR7eyBzdGVwcy5tZXRhLm91dHB1dHMubGFiZWxzIH19CiAgICAgICAgICBwdWxsOiB0cnVl
+9 -23
View File
@@ -11,28 +11,6 @@ jobs:
continue-on-error: true
with:
dockerfile: Dockerfile
build-push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4
- uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- id: meta
uses: docker/metadata-action@80c7e94dd9b9319bd5eb7a0e0fe9291e23a2a2e9 # v6
with:
images: jcabillot/offlineimap
tags: |
type=raw,value=latest
- uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
pull: true
test:
runs-on: ubuntu-latest
steps:
@@ -40,7 +18,15 @@ jobs:
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4
- run: docker build -t ci-image:${{ github.sha }} .
- run: bash tests/test.sh ci-image:${{ github.sha }}
build:
needs: [test]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4
- run: docker build -t jcabillot/offlineimap:${{ github.sha }} .
tag:
needs: [build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
@@ -55,4 +41,4 @@ jobs:
DEFAULT_BUMP: patch
RELEASE_BRANCHES: master
WITH_V: true
GIT_API_TAGGING: false
GIT_API_TAGGING: false
+1 -35
View File
@@ -1,35 +1 @@
name: Tag Release
on:
push:
tags: ['*']
jobs:
hadolint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- uses: hadolint/hadolint-action@2332a7b74a6de0dda2e2221d575162eba76ba5e5 # v3.3.0
continue-on-error: true
with:
dockerfile: Dockerfile
build-push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4
- uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- id: meta
uses: docker/metadata-action@80c7e94dd9b9319bd5eb7a0e0fe9291e23a2a2e9 # v6
with:
images: jcabillot/offlineimap
tags: |
type=ref,event=tag
- uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
pull: true
bmFtZTogVGFnIFJlbGVhc2UKb246CiAgcHVzaDoKICAgIHRhZ3M6IFsnKiddCmpvYnM6CiAgaGFkb2xpbnQ6CiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0CiAgICBzdGVwczoKICAgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QGRmNGNiMWMwNjllMTg3NGVkZDMxYjQzMTFmMTg4NDE3MmNlYzBlMTAgIyB2NgogICAgICAtIHVzZXM6IGhhZG9saW50L2hhZG9saW50LWFjdGlvbkAyMzMyYTdiNzRhNmRlMGRkYTJlMjIyMWQ1NzUxNjJlYmE3NmJhNWU1ICMgdjMuMy4wCiAgICAgICAgY29udGludWUtb24tZXJyb3I6IHRydWUKICAgICAgICB3aXRoOgogICAgICAgICAgZG9ja2VyZmlsZTogRG9ja2VyZmlsZQogIHRlc3Q6CiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0CiAgICBzdGVwczoKICAgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QGRmNGNiMWMwNjllMTg3NGVkZDMxYjQzMTFmMTg4NDE3MmNlYzBlMTAgIyB2NgogICAgICAtIHVzZXM6IGRvY2tlci9zZXR1cC1idWlsZHgtYWN0aW9uQGQ3ZjVlN2Y1MDllNDVjZWM1Yzc2YzRkNWFmZGQ3ZGU5M2QwYjNkZjUgIyB2NAogICAgICAtIHJ1bjogZG9ja2VyIGJ1aWxkIC10IGNpLWltYWdlOiR7eyBnaXRodWIuc2hhIH19IC4KICAgICAgLSBydW46IGJhc2ggdGVzdHMvdGVzdC5zaCBjaS1pbWFnZToke3sgZ2l0aHViLnNoYSB9fQogIGJ1aWxkLXB1c2g6CiAgICBuZWVkczogW3Rlc3RdCiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0CiAgICBzdGVwczoKICAgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QGRmNGNiMWMwNjllMTg3NGVkZDMxYjQzMTFmMTg4NDE3MmNlYzBlMTAgIyB2NgogICAgICAtIHVzZXM6IGRvY2tlci9zZXR1cC1idWlsZHgtYWN0aW9uQGQ3ZjVlN2Y1MDllNDVjZWM1Yzc2YzRkNWFmZGQ3ZGU5M2QwYjNkZjUgIyB2NAogICAgICAtIHVzZXM6IGRvY2tlci9sb2dpbi1hY3Rpb25ANjUwMDA2YzZlYjdkYmE3M2E5OTVjYzAzYjBiMmQ3ZjVjYTkxNWJlZSAjIHY0CiAgICAgICAgd2l0aDoKICAgICAgICAgIHVzZXJuYW1lOiAke3sgc2VjcmV0cy5ET0NLRVJIVUJfVVNFUk5BTUUgfX0KICAgICAgICAgIHBhc3N3b3JkOiAke3sgc2VjcmV0cy5ET0NLRVJIVUJfVE9LRU4gfX0KICAgICAgLSBpZDogbWV0YQogICAgICAgIHVzZXM6IGRvY2tlci9tZXRhZGF0YS1hY3Rpb25AODBjN2U5NGRkOWI5MzE5YmQ1ZWI3YTBlMGZlOTI5MWUyM2EyYTJlOSAjIHY2CiAgICAgICAgd2l0aDoKICAgICAgICAgIGltYWdlczogamNhYmlsbG90L29mZmxpbmVpbWFwCiAgICAgICAgICB0YWdzOiB8CiAgICAgICAgICAgIHR5cGU9cmVmLGV2ZW50PXRhZwogICAgICAgICAgICB0eXBlPXJlZixldmVudD10YWcsc3VmZml4PS1sYXRlc3QKICAgICAgLSB1c2VzOiBkb2NrZXIvYnVpbGQtcHVzaC1hY3Rpb25AZjlmMzA0MmY3ZTI3ODk1ODY2MTBkNmU4Yjg1YzhmMDNlNTE5NWJhZiAjIHY3LjIuMAogICAgICAgIHdpdGg6CiAgICAgICAgICBjb250ZXh0OiAuCiAgICAgICAgICBwdXNoOiB0cnVlCiAgICAgICAgICB0YWdzOiAke3sgc3RlcHMubWV0YS5vdXRwdXRzLnRhZ3MgfX0KICAgICAgICAgIGxhYmVsczogJHt7IHN0ZXBzLm1ldGEub3V0cHV0cy5sYWJlbHMgfX0KICAgICAgICAgIHB1bGw6IHRydWU=