feat(platforms): add s390x architecture support
Summary
This PR adds complete s390x (IBM System/390) architecture support to Vector, enabling the project to be built, packaged, and published for s390x Linux systems. The implementation follows the existing patterns used for other architectures (aarch64, armv7, arm) and includes:
- Cross-compilation configuration
- CI/CD workflow integration for building packages
- Package generation (tar.gz, DEB, RPM)
- Multi-platform Docker image support
- Integration with the publish workflow for S3, GitHub releases, and Docker Hub
This change enables Vector to run natively on IBM Z and LinuxONE systems, expanding platform support for users in enterprise and mainframe environments.
Vector configuration
No Vector configuration changes are required. This PR only adds build and packaging infrastructure for the s390x architecture. Users on s390x systems will be able to use Vector with the same configuration options as other supported architectures.
How did you test this PR?
Testing approach:
- Verified all modified workflow files pass YAML validation
- Confirmed Cross.toml configuration follows the established pattern for other architectures
- Verified Makefile targets follow naming conventions used for arm/aarch64 targets
- Confirmed Cargo.toml metadata is consistent with other architecture variants
- Validated that the publish.yml workflow correctly includes s390x in all relevant jobs:
- Build job for s390x packages
- Artifact downloads in publish-docker, publish-s3, publish-github
- SHA256 checksum generation
- Docker multi-platform build with linux/s390x
Note: Full end-to-end testing requires s390x hardware or emulation and will be validated through the CI pipeline once merged.
Change Type
- [ ] Bug fix
- [x] New feature
- [ ] Non-functional (chore, refactoring, docs)
- [ ] Performance
Is this a breaking change?
- [ ] Yes
- [x] No
Does this PR include user facing changes?
- [ ] Yes. Please add a changelog fragment based on our guidelines.
- [x] No. A maintainer will apply the
no-changeloglabel to this PR.
User-facing impact: Users on s390x architecture will now be able to download and install pre-built Vector packages (tar.gz, DEB, RPM) and use the official Docker images on s390x systems.
References
N/A - This is a new platform support addition without an associated issue.
Notes
Implementation Details
Modified Files:
.github/workflows/cross.yml- Added s390x to cross-compilation matrix.github/workflows/publish.yml- Added complete s390x build and publish pipeline integrationCross.toml- Added s390x Docker image configuration for cross-compilationCargo.toml- Added s390x target features and DEB package metadataMakefile- Added build, package, DEB, and RPM targets for s390x
Key Design Decisions:
- Follows the exact same pattern as existing architectures (arm, aarch64, armv7)
- Uses the generic parameterized
scripts/cross/Dockerfile(no architecture-specific dockerfile needed) - Includes full integration with all publish workflows (Docker, S3, GitHub releases, checksums)
- Targets
s390x-unknown-linux-gnu(GNU libc) which is the standard for enterprise s390x Linux distributions
Pre-push Checklist Completed:
- [x]
make fmt- Code formatting applied - [x] Configuration files validated (YAML syntax, Makefile syntax, TOML syntax)
- [x] Changes follow existing patterns and conventions
- [ ]
make check-clippy- N/A (no Rust code changes) - [ ]
make test- N/A (no functional code changes) - [ ]
make build-licenses- N/A (no dependency changes)
Could you please add the no-changelog label to this PR? This PR only adds build and packaging infrastructure for the s390x architecture. Users on s390x architecture will now be able to download and install pre-built Vector packages (tar.gz, DEB, RPM) and use the official Docker images on s390x systems. Existing users of other platforms are not affected in anyway.
Thanks!
Thank you @binhnguyenduc for taking the time to put together this comprehensive PR. However, we have some concerns about accepting s390x (or any new platform) as an officially supported platform mainly due to the support burden it introduces. We understand this isn't the answer you were hoping for, but we I have to be transparent about our capacity constraints.
An alternative that might work for you: Create a third-party distribution for s390x. This PR already demonstrates how to create and publish a build, you should be able to just publish to another image registry. Maintaining a fork with a custom publish.yml should be easy but it would be even better and cleaner if you introduce a new workflow just for this build (avoids merge conflcits). Happy to discuss how to make third party builds easier to maintain (feel free to create an discussion or issue).