diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d6f050c..dd4ffbe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,14 +13,26 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - run: docker build -t skaji/relocatable-perl -f build/Dockerfile . - - run: bash build/github-actions.sh linux_create_artifacts + - run: docker build --build-arg IMAGE=centos:centos6 -t skaji/relocatable-perl -f build/Dockerfile . + - run: bash build/github-actions.sh x86_64_linux_create_artifacts - uses: actions/upload-artifact@v2 with: name: x86_64-linux path: x86_64-linux + aarch64-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: docker/setup-qemu-action@v1 + - uses: docker/setup-buildx-action@v1 + - run: docker buildx build --platform linux/arm64 --build-arg IMAGE=centos:centos7 -t skaji/relocatable-perl -f build/Dockerfile --load . + - run: bash build/github-actions.sh aarch64_linux_create_artifacts + - uses: actions/upload-artifact@v2 + with: + name: aarch64-linux + path: aarch64-linux darwin-2level: - runs-on: macOS-latest + runs-on: macos-latest steps: - uses: actions/checkout@v2 - run: sw_vers diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e14b964..c839454 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,14 +10,26 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - run: docker build -t skaji/relocatable-perl -f build/Dockerfile . - - run: bash build/github-actions.sh linux_create_artifacts + - run: docker build --build-arg IMAGE=centos:centos6 -t skaji/relocatable-perl -f build/Dockerfile . + - run: bash build/github-actions.sh x86_64_linux_create_artifacts - uses: actions/upload-artifact@v2 with: name: x86_64-linux path: x86_64-linux + aarch64-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: docker/setup-qemu-action@v1 + - uses: docker/setup-buildx-action@v1 + - run: docker buildx build --platform linux/arm64 --build-arg IMAGE=centos:centos7 -t skaji/relocatable-perl -f build/Dockerfile --load . + - run: bash build/github-actions.sh aarch64_linux_create_artifacts + - uses: actions/upload-artifact@v2 + with: + name: aarch64-linux + path: aarch64-linux darwin-2level: - runs-on: macOS-latest + runs-on: macos-latest steps: - uses: actions/checkout@v2 - run: sw_vers @@ -32,12 +44,17 @@ jobs: runs-on: ubuntu-latest needs: - x86_64-linux + - aarch64-linux - darwin-2level steps: - uses: actions/download-artifact@v2 with: name: x86_64-linux path: x86_64-linux + - uses: actions/download-artifact@v2 + with: + name: aarch64-linux + path: aarch64-linux - uses: actions/download-artifact@v2 with: name: darwin-2level @@ -65,6 +82,22 @@ jobs: asset_path: x86_64-linux/perl-x86_64-linux.tar.xz asset_name: perl-x86_64-linux.tar.xz asset_content_type: application/x-xz + - uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: aarch64-linux/perl-aarch64-linux.tar.gz + asset_name: perl-aarch64-linux.tar.gz + asset_content_type: application/gzip + - uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: aarch64-linux/perl-aarch64-linux.tar.xz + asset_name: perl-aarch64-linux.tar.xz + asset_content_type: application/x-xz - uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build/Dockerfile b/build/Dockerfile index 80febb1..e0249a4 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,6 +1,8 @@ -FROM centos:centos6 as builder +ARG IMAGE +FROM $IMAGE +ARG IMAGE -RUN sed -i 's/^#baseurl=/baseurl=/g; s/^mirrorlist=/#mirrorlist=/g; s/http:\/\/mirror.centos.org/https:\/\/vault.centos.org/g' /etc/yum.repos.d/CentOS-Base.repo +RUN if [[ $IMAGE = centos:centos6 ]]; then sed -i 's/^#baseurl=/baseurl=/g; s/^mirrorlist=/#mirrorlist=/g; s/http:\/\/mirror.centos.org/https:\/\/vault.centos.org/g' /etc/yum.repos.d/CentOS-Base.repo; fi RUN yum install -y \ gcc \ make \ @@ -10,24 +12,25 @@ RUN yum install -y \ xz RUN mkdir -p \ /lib \ - /lib/x86_64-linux-gnu \ + /lib/$(uname -m)-linux-gnu \ /lib64 \ /usr/lib \ - /usr/lib/x86_64-linux-gnu \ + /usr/lib/$(uname -m)-linux-gnu \ /usr/lib64 \ /usr/local/lib \ /usr/local/lib64 -RUN curl -fsSL https://git.io/perl-install | bash -s /perl +RUN mkdir /perl +RUN curl -fsSL https://github.com/skaji/relocatable-perl/releases/download/5.34.1.0/perl-$(uname -m)-linux.tar.xz | tar xJf - --strip-components 1 -C /perl RUN curl -fsSL --compressed -o /cpm https://git.io/cpm COPY build/relocatable-perl-build build/cpm.yml BUILD_VERSION / RUN /perl/bin/perl /cpm install -g RUN /perl/bin/perl /relocatable-perl-build --perl_version $(cat /BUILD_VERSION) --prefix /opt/perl RUN /opt/perl/bin/perl /cpm install -g App::cpanminus App::ChangeShebang RUN /opt/perl/bin/change-shebang -f /opt/perl/bin/* -RUN cp -r /opt/perl /tmp/perl-x86_64-linux +RUN cp -r /opt/perl /tmp/perl-$(uname -m)-linux RUN set -eux; \ cd /tmp; \ - tar cf perl-x86_64-linux.tar perl-x86_64-linux; \ - gzip -9 --stdout perl-x86_64-linux.tar > /perl-x86_64-linux.tar.gz; \ - xz -9 --stdout perl-x86_64-linux.tar > /perl-x86_64-linux.tar.xz; \ + tar cf perl-$(uname -m)-linux.tar perl-$(uname -m)-linux; \ + gzip -9 --stdout perl-$(uname -m)-linux.tar > /perl-$(uname -m)-linux.tar.gz; \ + xz -9 --stdout perl-$(uname -m)-linux.tar > /perl-$(uname -m)-linux.tar.xz; \ true diff --git a/build/github-actions.sh b/build/github-actions.sh index 07377a4..abc0df1 100644 --- a/build/github-actions.sh +++ b/build/github-actions.sh @@ -28,7 +28,7 @@ mac_create_artifacts() { xz -9 --stdout perl-darwin-2level.tar > darwin-2level/perl-darwin-2level.tar.xz } -linux_create_artifacts() { +x86_64_linux_create_artifacts() { mkdir x86_64-linux ID=$(docker create skaji/relocatable-perl) docker cp $ID:/perl-x86_64-linux.tar.gz x86_64-linux/ @@ -36,6 +36,14 @@ linux_create_artifacts() { docker rm $ID } +aarch64_linux_create_artifacts() { + mkdir aarch64-linux + ID=$(docker create --platform linux/arm64 skaji/relocatable-perl) + docker cp $ID:/perl-aarch64-linux.tar.gz aarch64-linux/ + docker cp $ID:/perl-aarch64-linux.tar.xz aarch64-linux/ + docker rm $ID +} + case "$1" in mac_prepare_tools) mac_prepare_tools @@ -46,8 +54,11 @@ mac_build_perl) mac_create_artifacts) mac_create_artifacts ;; -linux_create_artifacts) - linux_create_artifacts +x86_64_linux_create_artifacts) + x86_64_linux_create_artifacts + ;; +aarch64_linux_create_artifacts) + aarch64_linux_create_artifacts ;; *) echo "unknown command: $1" >&2 diff --git a/build/relocatable-perl-build b/build/relocatable-perl-build index a062512..f2f2afc 100644 --- a/build/relocatable-perl-build +++ b/build/relocatable-perl-build @@ -17,6 +17,7 @@ use CPAN::Perl::Releases::MetaCPAN 'perl_tarballs'; use HTTP::Tinyish; use IPC::Run3 'run3'; use version; +use POSIX 'uname'; sub run { my ($cmd, $log) = @_; @@ -136,15 +137,16 @@ sub perl_build { # remove -lnsl push @Configure, "-Dlibs=-lpthread -ldl -lm -lcrypt -lutil -lc"; - my @libpth = qw( - /lib - /lib/x86_64-linux-gnu - /lib64 - /usr/lib - /usr/lib/x86_64-linux-gnu - /usr/lib64 - /usr/local/lib - /usr/local/lib64 + my $arch = (uname)[4]; + my @libpth = ( + "/lib", + "/lib/$arch-linux-gnu", + "/lib64", + "/usr/lib", + "/usr/lib/$arch-linux-gnu", + "/usr/lib64", + "/usr/local/lib", + "/usr/local/lib64", ); push @Configure, "-Dlibpth=@libpth"; }