Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify & introduce versioning #83

Closed
wants to merge 5 commits into from

Conversation

meeDamian
Copy link

This PR simplifies the build process, and introduces git-tag-based versions to Docker tags.

Most specifically, each successful GIT TAG build results in Docker deployment that pushes two Docker tags for each built image:

  • one moving, that is updated with each new passing build, ex. :latest, :register, or :arm, and
  • one version-specific, that will never change, ex :v4.0.0-5, :register-v4.0.0-5, or :arm-v4.0.0-5.

Other changes:

  • Github release deployment now happens using native deploy mechanism,
  • Docker push happens only if build was triggered by pushing a git tag,
  • All x86_64_ prefixes are stripped since, as of now it's the only supported architecture anyway,
  • Triggering build of a new version is as simple as this, namely:
    1. Adjust URL in .travis.yml file to point to the newest qemu release

    2. Commit said line change, ex:

      git add .travis.yml
      git commit -m 'qemu version bumped to X'
      
    3. Tag & push, ex:

      git tag -sa v4.0.0-5 -m "v4.0.0-5" 
      git push origin v4.0.0-5
      
    4. Wait :)

  • Travis needs to be configured with DOCKER_USER, and DOCKER_PASS environment variables.

Github deployment

Note, since I don't have write rights to this repository, api_key used here needs to be regenerated by someone who does have access :). The easiest way I've found to do it so far is:

cd qemu-user-static/
travis setup releases --com

Unfortunately, running this command has a nasty habit of changing .yml file a bit more than necessary, so I advice just copying the encrypted API key from there, and pasting it to the restored file.

Outcomes

You can see how successful releases & Github uploads look like here: https://github.com/meeDamian/qemu-user-static/releases .

All Docker tags pushed during Travis builds can be found here: https://hub.docker.com/r/meedamian/qemu-user-static/tags

Happy to hear feedback. The issue that inspired me to get to it was #74 .

@meeDamian
Copy link
Author

I've noticed you use travis-ci.org, as opposed to travis-ci.com, in which case the --com flag to the travis setup command should not be used :).

@junaruga
Copy link
Member

Hi @meeDamian , I really appreciate your contribution!

Yes, the versioning is very important feature with high priority for this project.

I proposed the feature at below ticket too.
#74 (comment)

I will take a look at your code later.
But please be patient as I will be in vacation next week. :)

Thank you!

@junaruga
Copy link
Member

junaruga commented Aug 15, 2019

I've noticed you use travis-ci.org, as opposed to travis-ci.com, in which case the --com flag to the travis setup command should not be used :).

Yes "travis-ci.org" is used for a free Travis CI plan. Open source project uses it. "travis-ci.com" is for non-free paid Travis CI plan. :)

@junaruga
Copy link
Member

junaruga commented Aug 15, 2019

In a mean time, is it possible to do squash current 9 commits to 1 commit by git rebase -i <commit hash> and etc to make the code review easier? Is there a reason to keep the commits?

@meeDamian
Copy link
Author

I had the commits so that I could generate git tags for qemu versions, trigger and reference Travis builds, and docker hub tags.

That being said, I've moved them to another branch and squashed in this one :).

@meeDamian
Copy link
Author

Note that the most recent build overrides all floating Docker tags, so it's best to push said tags in strictly increasing order.

Copy link
Member

@moul moul left a comment

Choose a reason for hiding this comment

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

Awesome! :)

@junaruga
Copy link
Member

junaruga commented Aug 15, 2019

@moul Wow, thanks for the quick review. :) Could you give me a time for my review?

@moul
Copy link
Member

moul commented Aug 15, 2019

yep sure, I was mostly approving the overall approach, I may have miss some details, take the time you need :)

@junaruga
Copy link
Member

@moul Thanks.

@meeDamian Your approach to simplify is amazing! Thank you.

Let's me comment on one by one.
First about a big picture.

Image tag version format

one version-specific, that will never change, ex :v4.0.0-5, :register-v4.0.0-5, or :arm-v4.0.0-5

I would prefer "ex :v4.0, :register-v4.0, or :arm-v4.0" than "ex :v4.0.0-5, :register-v4.0.0-5, or :arm-v4.0.0-5".

Because

  • Reason 1: I want to consider to align with our sister project: https://github.com/dbhi/qus (DockerHub: https://hub.docker.com/r/aptman/qus/tags) with a balancing.
    In aptman/qus, the tag is f4.0.0 (from fedora qemu) or d3.1 without a qemu package release number.
  • Reason 2: To save the number of containers as our project's small start.

That means below kind of logic to replace v3.1.0-3 with v3.1 or v4.0.0 with v4.0 is needed at early step.

TAG_VERSION=$(echo  ${TRAVIS_TAG} | sed 's/something/something/')

Pipeline to rerun already git tagged version

While the pipeline based on TRAVIS_TAG is great, the pipeline can be failed because of some issue.
And maybe we also want to run old tag's pipeline to upload old qemu version's tag.
That means below kind of logic might be useful.

TAG_VERSION=${TAG_VERSION-TRAVIS_TAG}

When people want to rerun or run for old qemu version, we can set like this in .travis.yml.

ADHOC_TAG=v3.1.0-3
TAG_VERSION=${ADHOC_TAG:-TRAVIS_TAG}

In that case, the deploy condition might be like this.

  - name: deploy
    if: tag IS present OR <ADHOC_TAG is not empty>

x86_64 prefix

All x86_64_ prefixes are stripped since, as of now it's the only supported architecture anyway,

I disagree for this change. Please keep the prefix.
https://github.com/multiarch/qemu-user-static/releases

We have already released the x86_64 prefix tar.gz x86_64_qemu-aarch64-static.tar.gz.
Changing the prefix breaks backward compatibility.
Users are confused as a possibility.

x86_64 prefix is to implement new host arch's container images or tar.gz on GitHub releases.
Now only x86_64 are supported. It's for future's preparation.

Now we are trying to implement other arch host's images and tar.gz files, that are aarch64, s390x prefix and etc.
#77

I like that below .gitignore modification is reverted.

-/containers/x86_64_qemu-*/
+/containers/qemu-*/

Detail

I comment it on the line.

.gitignore Outdated
@@ -4,5 +4,5 @@
/containers/latest/qemu-*-static
/containers/register/Dockerfile
/containers/register/register.sh
/containers/x86_64_qemu-*/
/containers/qemu-*/
Copy link
Member

Choose a reason for hiding this comment

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

As I commented in big picture section, I prefer keeping x86_64 prefix, because we are trying support other host arch now. I like to see that this modification in .gitignore is reverted.

Copy link
Author

Choose a reason for hiding this comment

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

This dir is rm -rf-ed after each loop iteration: https://github.com/meeDamian/qemu-user-static/blob/simplify/build-docker.sh#L61, so frankly speaking a completely static name could be used for it. As a matter of fact, I think it might be even better, and simpler.

.travis.yml Outdated
@@ -3,42 +3,49 @@ services: docker
language: bash
Copy link
Member

Choose a reason for hiding this comment

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

You changed your new modification with 2 spaces indent. But this .travis.yml YAMP file was managed with 4 spaces indent. Please change your modification in .travis.yml to 4 spaces.

@@ -3,42 +3,49 @@ services: docker
language: bash
addons:
apt:
config:
retries: true
Copy link
Member

Choose a reason for hiding this comment

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

Why did you remove the lines? I added the lines referring ruby/ruby's .travis.yml.
https://github.com/ruby/ruby/blob/master/.travis.yml#L120

Copy link
Author

Choose a reason for hiding this comment

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

My IDE says this property is not allowed there. I wasn't able to find any documentation about it. Everything worked well without it. I'm happy to add it back if it actually does something, or is useful :).

Copy link
Member

Choose a reason for hiding this comment

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

Please back it.

When "My IDE says this property is not allowed there", removing it is not good choice.

As you may know Travis is open source and written in Ruby language. In Ruby project, the core maintainers communicate with a core member on Travis project in Ruby project. As a result, the feature that is not documented, only existed in the source code can be used for Ruby project as a possibility. Ruby project uses .travis.yml with very advanced way.

.travis.yml Outdated
file_glob: true
file: releases/*.tgz
on:
repo: ${TRAVIS_REPO_SLUG}
Copy link
Member

Choose a reason for hiding this comment

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

This line means the container image's URL that is used for docker push, right?
Not everyone's GitHub (owner_name/repo_name) including forked repository equals the image URL (owner_name/repo_name) on DockerHub.

The logic is to consider the cases to give users options.
In my opinion, DockerHub has a problem for the security than quay.io.

        - DOCKER_SERVER=docker.io
        # - DOCKER_SERVER=quay.io
        # Git repository
        - REPO=multiarch/qemu-user-static
        # Container repository
        - DOCKER_REPO=$DOCKER_SERVER/multiarch/qemu-user-static

My development container repository is here quay.io/junaruga/qemu-user-static.
https://quay.io/repository/junaruga/qemu-user-static?tab=info
The container server information is necessary.

When someone already have qemu-user-static repository, the forked repository from this repository is username/qemu-user-static-1.

Copy link
Author

Choose a reason for hiding this comment

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

That line (and entire deploy: section here) has nothing to do with Docker. This is a Travis-provided line that contains Github's SLUG ex. multiarch/qemu-user-static so that deploy knows where to upload the tarballs.

- REPO=multiarch/qemu-user-static
# Container repository
- DOCKER_REPO=$DOCKER_SERVER/multiarch/qemu-user-static
# - DOCKER_REPO=$DOCKER_SERVER/your_username/qemu-user-static
Copy link
Member

Choose a reason for hiding this comment

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

Please keep VERSION (For adhoc pipline), DOCKER_SERVER, REPO, DOCKER_REPO.
In general, it's not only for this project, I think that a good strategy to send pull-request, is "1 pull-request, 1 feature".
You changed a lot including some features.

The reason why 1 pull-request, 1 feature strategy is better is you can proceed your work understanding project people's needs and intentions towards your final goal.
The output becomes "1 commit 1 feature". The merit of this is if the new commit has a issue, we can revert the commit later.

Though I understand the each feature in this PR is great.

I am thinking how we can proceed this PR.

Copy link
Author

Choose a reason for hiding this comment

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

Everything was commented out, and defaults were used. I thought that in a case like this it's simpler to start with a cleaner slate, and then gradually add features, as they become needed at the time.

Also, not sure what "adhoc pipline" means, and how and what version to add 🤔

test.sh Outdated
exit 1
fi
# Convert Travis-provided repo SLUG to lowercase - Docker's requirement for tags
SLUG="$(echo "${TRAVIS_REPO_SLUG}" | tr '[:upper:]' '[:lower:]')"
Copy link
Member

Choose a reason for hiding this comment

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

TRAVIS_REPO_SLUG does not always container repository's URL. Please keep DOCKER_REPO in this file.

build-docker.sh Outdated
@@ -0,0 +1,92 @@
#!/usr/bin/env bash
Copy link
Member

Choose a reason for hiding this comment

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

I do not like the file name build-docker.sh.
The reason is

  1. shell scripts in this project is alphabet (small letter) + underscore as a separator.
  2. "docker" is product name. "containers" are already used as a output directory name for the purpose.

I prefer the file name build_containers.sh.

Copy link
Member

Choose a reason for hiding this comment

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

This project's shell scripts are 4 spaces indent mainly. See removed publish.sh and removed lines in test.sh.
So, keep 4 spaces indent on shell scripts (*.sh).

build-docker.sh Outdated
@@ -0,0 +1,92 @@
#!/usr/bin/env bash
set -xe
Copy link
Member

Choose a reason for hiding this comment

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

If you use pipe | in the shell script, consider pipefail.

#!/usr/bin/env bash
set -xeo pipefail

build-docker.sh Outdated
# Convert Travis-provided repo SLUG to lowercase - Docker's requirement for tags
SLUG="$(echo "${TRAVIS_REPO_SLUG}" | tr '[:upper:]' '[:lower:]')"

#
Copy link
Member

Choose a reason for hiding this comment

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

You forget comment here?

Copy link
Author

Choose a reason for hiding this comment

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

Not sure if necessary, I'll just remove the line :)

build-docker.sh Outdated


# Convert Travis-provided repo SLUG to lowercase - Docker's requirement for tags
SLUG="$(echo "${TRAVIS_REPO_SLUG}" | tr '[:upper:]' '[:lower:]')"
Copy link
Member

Choose a reason for hiding this comment

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

Please do not use SLUG (Github's owner_name/repo_name) as docker repo. The reason is as I wrote at other part.
Please keep using DOCKER_REPO in the file instead.

@@ -1,11 +1,17 @@
#!/bin/bash -e
#!/usr/bin/env bash
Copy link
Member

Choose a reason for hiding this comment

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

You need "-e" here, keep compatibility.

Copy link
Author

Choose a reason for hiding this comment

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

Adding -e to #!/usr/bin/env bash breaks everything. AFAIK using #!/usr/bin/env bash is recommended. I have no idea what -e does, I'm happy to go with anything you recommend :).

Copy link
Member

Choose a reason for hiding this comment

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

I do not object with #!/usr/bin/env bash.
It is certainly a good practice

  • In a case of people want to run a bash script on the environment where /bin/bash does not exist. But I wonder if there is the Linux or UNIX distribution that do not have it today. Because /bin/ is standard rule of Linux system. Ref: https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard .
  • I a case of people want to run a shell script on the different path's bash that is source compiled bash.

The down side of #!/usr/bin/env bash is different path's bash is unintentionally executed.

I am not a original coder who wrote #!/bin/bash. But you should feel original coder's good intent for the code. At least you should not include the change of #!/usr/bin/env bash in this PR. Because it's not harmful.
For each change especially for non backward compatibility feature, we need discussion.

Copy link
Member

Choose a reason for hiding this comment

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

I have no idea what -e does, I'm happy to go with anything you recommend :).

You do not know bash -e? It's quite important feature to make the bash script defensive. It's similar with set -e. man bash might explain you.

When you have no idea what something does, proceeding removing it is not good choice.

@junaruga
Copy link
Member

I think we do not include TRAVIS_TAG and TRAVIS_REPO_SLUG variables in '*.sh".
Because we (at least me) want to run the shell scripts on my local environment.

If you keep below variables, it is possible not to use the TRAVIS-* in .*.sh.

-    global:
-        - VERSION=4.0.0-5
-        # See qemu-user-static's RPM spec file on Fedora to check the new version.
-        # https://src.fedoraproject.org/rpms/qemu/blob/master/f/qemu.spec
-        - DOCKER_SERVER=docker.io
-        # - DOCKER_SERVER=quay.io
-        # Git repository
-        - REPO=multiarch/qemu-user-static
-        # Container repository
-        - DOCKER_REPO=$DOCKER_SERVER/multiarch/qemu-user-static
-        # - DOCKER_REPO=$DOCKER_SERVER/your_username/qemu-user-static
-        - PACKAGE_URI="https://kojipkgs.fedoraproject.org/packages/qemu/4.0.0/5.fc31/x86_64/q
emu-user-static-4.0.0-5.fc31.x86_64.rpm"
-        - PACKAGE_FILENAME=$(basename "$PACKAGE_URI")

Keep docker images that is after building containers on local.
That's useful to check actual created containers with tags.

Copy link
Member

@junaruga junaruga left a comment

Choose a reason for hiding this comment

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

I commented many points. :)
I appreciate your work for this PR.
But I think basically "1 PR 1 feature" one by one. was better approach to make your and reviewer's work easier.

You are harder to fix when you send 1 PR including several features.

@junaruga
Copy link
Member

Travis needs to be configured with DOCKER_USER, and DOCKER_PASS environment variables.

We are already running with DOCKER_PASSWORD in this repository.
I do not think it is necessary change for this PR.

@junaruga
Copy link
Member

junaruga commented Aug 16, 2019

Sorry @meeDamian I sent another PR to implement versioning with minimal steps.
#84

I think you want to see it is implemented soon.
But I think we need more time to accomplish this PR.

After #84 is merged, I want to see this PR focusing only the one feature "simplifies the build process", keeping current implementations that have good intentions.

Thank you for your understanding.

.travis.yml Outdated
jobs:
include:
- stage: build
name: "Build Docker image for amd64"
Copy link
Member

@junaruga junaruga Aug 16, 2019

Choose a reason for hiding this comment

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

Can you change "Build container images for x86_64"?
Because "x86_64" and "container" are already used in other parts and manual. "Docker" is product name.

@meeDamian
Copy link
Author

Image tag version format

one version-specific, that will never change, ex :v4.0.0-5, :register-v4.0.0-5, or :arm-v4.0.0-5

I would prefer "ex :v4.0, :register-v4.0, or :arm-v4.0" than "ex :v4.0.0-5, :register-v4.0.0-5, or :arm-v4.0.0-5".

Because

  • Reason 1: I want to consider to align with our sister project: dbhi/qus (DockerHub: hub.docker.com/r/aptman/qus/tags) with a balancing.
    In aptman/qus, the tag is f4.0.0 (from fedora qemu) or d3.1 without a qemu package release number.
  • Reason 2: To save the number of containers as our project's small start.

That means below kind of logic to replace v3.1.0-3 with v3.1 or v4.0.0 with v4.0 is needed at early step.

TAG_VERSION=$(echo  ${TRAVIS_TAG} | sed 's/something/something/')

The issue with that is that my original problem would remain unsolved with this approach: v4.0.0-5 didn't work work me, but v4.0.0-4 did.

What I can do, is to add an extra floating vMAJOR-MINOR tag that always points to the latest MINOR version. It's a very common practice in Docker, because that gives one the flexibility to use a specific version, as well as stay always-up-to-date stay on a chosen minor version.

@meeDamian
Copy link
Author

meeDamian commented Aug 16, 2019

Pipeline to rerun already git tagged version

While the pipeline based on TRAVIS_TAG is great, the pipeline can be failed because of some issue.
And maybe we also want to run old tag's pipeline to upload old qemu version's tag.
That means below kind of logic might be useful.

TAG_VERSION=${TAG_VERSION-TRAVIS_TAG}

When people want to rerun or run for old qemu version, we can set like this in .travis.yml.

ADHOC_TAG=v3.1.0-3
TAG_VERSION=${ADHOC_TAG:-TRAVIS_TAG}

In that case, the deploy condition might be like this.

  - name: deploy
    if: tag IS present OR <ADHOC_TAG is not empty>

I think there are several issues with that, that would necessitate adding further complexity, ex: What to do with github release uploads? If there's no git tag, there's no place for them to go.

Also, I like the consistency of github tags corresponding directly to releases, and docker version tags. Keep in mind that changing binary version is now literally a single line change in the .travis.yml file.

Namely, if you do what I did with bump qemu… commits here: https://github.com/meeDamian/qemu-user-static/commits/simplify-with-tags, tag them all appropriately, and push all tags - everything will fall in place nicely.

@meeDamian
Copy link
Author

meeDamian commented Aug 16, 2019

x86_64 prefix

All x86_64_ prefixes are stripped since, as of now it's the only supported architecture anyway,

I disagree for this change. Please keep the prefix.
multiarch/qemu-user-static/releases

We have already released the x86_64 prefix tar.gz x86_64_qemu-aarch64-static.tar.gz.
Changing the prefix breaks backward compatibility.
Users are confused as a possibility.

x86_64 prefix is to implement new host arch's container images or tar.gz on GitHub releases.
Now only x86_64 are supported. It's for future's preparation.

Now we are trying to implement other arch host's images and tar.gz files, that are aarch64, s390x prefix and etc.
#77

I like that below .gitignore modification is reverted.

-/containers/x86_64_qemu-*/
+/containers/qemu-*/

Ok, no problem :)

Do you want to have two versions: one with the prefix, and one without? Or is just one with the prefix sufficient?

@meeDamian
Copy link
Author

meeDamian commented Aug 16, 2019

I think we do not include TRAVIS_TAG and TRAVIS_REPO_SLUG variables in '*.sh".
Because we (at least me) want to run the shell scripts on my local environment.

If you keep below variables, it is possible not to use the TRAVIS-* in .*.sh.

-    global:
-        - VERSION=4.0.0-5
-        # See qemu-user-static's RPM spec file on Fedora to check the new version.
-        # https://src.fedoraproject.org/rpms/qemu/blob/master/f/qemu.spec
-        - DOCKER_SERVER=docker.io
-        # - DOCKER_SERVER=quay.io
-        # Git repository
-        - REPO=multiarch/qemu-user-static
-        # Container repository
-        - DOCKER_REPO=$DOCKER_SERVER/multiarch/qemu-user-static
-        # - DOCKER_REPO=$DOCKER_SERVER/your_username/qemu-user-static
-        - PACKAGE_URI="https://kojipkgs.fedoraproject.org/packages/qemu/4.0.0/5.fc31/x86_64/q
emu-user-static-4.0.0-5.fc31.x86_64.rpm"
-        - PACKAGE_FILENAME=$(basename "$PACKAGE_URI")

If you run the script with:

TRAVIS_REPO_SLUG=multiarch/qemu-user-static ./test.sh

it should work, that being said I'm happy to add fallback to all TRAVIS_ vars in .sh: ${TRAVIS_REPO_SLUG:-$REPO}, or hardcoded ${TRAVIS_REPO_SLUG:-multiarch/qemu-user-static}. Main reason I've added TRAVIS_ vars there is because I couldn't get .travis.yml-defined global vars to be available in scripts.

Keep docker images that is after building containers on local.
That's useful to check actual created containers with tags.

👍🏻

@meeDamian
Copy link
Author

meeDamian commented Aug 16, 2019

I think I've addressed most issues, but I would still like to know what exactly you want to achieve with the adhoc pipeline?

@meeDamian
Copy link
Author

Ah could you also explain the :register image to me? It's not exactly clear what it does, or what it is useful for to me, thank you :).

@junaruga
Copy link
Member

I think I've addressed most issues, but I would still like to know what exactly you want to achieve with the adhoc pipeline?

I used "adhoc pipeline" means the one without "git" tagging", and same with "Pipeline to rerun already git tagged version".

@meeDamian
Copy link
Author

You can do that from Travis's interface, can't you?

@junaruga
Copy link
Member

junaruga commented Aug 16, 2019

You can do that from Travis's interface, can't you?

For rerun, it is possible from Travis interface.
But it is not enough when running past tagged qemu version with latest fixes and features.

The scenario of commits is

  1. Run pipeline with version A.
  2. Add commit to fix to a bug.
  3. Add commit to add new feature
  4. Run pipeline with version B.
  5. Then rerun pipeline with version A with above fix and the new feature.

@meeDamian
Copy link
Author

Thank you, that makes it clearer :).

The only question I have is wouldn't that warrant a new git tag? Either an extra one, or previous one changed to point to the correct source version. Otherwise you have a case where containers shipped, are not what the source code would claim they are.

To use your scenario:

  1. Run pipeline with version A (say v4.0.0).
  2. Add commit to fix to a bug.
  3. Add commit to add new feature
  4. Create a new git tag
    1. Either something along the lines of v4.0.0-bugfix-1, if you want previous version to be preserved as well, or
    2. delete previous tag, and create it anew for the now fixed, and correct source
  5. Run pipeline with version B.
  6. Then rerun pipeline with version A with above fix and the new feature. Push the tag

The issue with that, in both approaches, is that build A would overwrite the floating tags, even if version B is newer. I reckon the easiest way to address that would be to:

  1. Each fix commit of this nature, would also add BUGFIXBUILD=true in .travis.yml, which would prevent overwriting of any floating tags, or
  2. Before each bugfix build said variable is added to build config variables in Travis's interface.

In both cases the variable needs to be removed after the build.

@junaruga
Copy link
Member

junaruga commented Aug 16, 2019

Ah could you also explain the :register image to me? It's not exactly clear what it does, or what it is useful for to me, thank you :).

It's only to add binfmt_misc files with "flags: " (empty).
binfmt_misc file is a special file, that is a Linux kernel feature. The benefit of the file is people can run arch specific binary (= arch container) without specifying the qemu interpreter file (qemu-$arch-static file).

The register image was the only way to run arch container until a few weeks ago, until "mutlarch/qemu-user-static" (latest) was released.
I think still many people using the register image.
And I can imagine register image is preferred than "mutlarch/qemu-user-static" in some cases for people who wants to create the minimal resourced (memory and disk size) container image.

You can refer README.md and Developers Guide under does/ directory.

@junaruga
Copy link
Member

Thank you for your contributing. Let me close this big PR at once.

@junaruga junaruga closed this Jul 14, 2020
@meeDamian
Copy link
Author

Long overdue :). Sorry I haven't closed it before myself - I forgot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants